[英]How does this java code execute code?
我的编程课中有一个项目,我没有测试用例。 我查看测试驱动程序并找到:
private static boolean testSquareArch()
{
boolean pass = true;
int test = 1;
int cnt;
Square sq;
Class cl;
System.out.println("Square architecture tests...");
sq = new Square(true, true, true, true, 0, 0);
cl = sq.getClass();
cnt = cl.getFields().length;
pass &= test(cnt == 5, test++); //FAILING THIS TEST
这是做什么的以及如何检查我的代码?
我也在这里,这又做什么?
// Count and test number of of PACKAGE fields
cnt = cl.getDeclaredFields().length
- countModifiers(cl.getDeclaredFields(), Modifier.PRIVATE)
- countModifiers(cl.getDeclaredFields(), Modifier.PROTECTED)
- countModifiers(cl.getDeclaredFields(), Modifier.PUBLIC);
pass &= test(cnt == 5, test++); // Test 8
我没有通过这些测试用例,只是想知道原因。 谢谢
如果您询问&=
赋值运算符,只有当右侧参数也为真时,它才会使变量保持为真(如果它已经为假,则它将保持为假)。 它的工作方式与+=
, a &= b
与a = a & b
,运算符&
是布尔结合(AND)。
pass &= test(cnt == 5, test++);
是简写
if( ! test( cnt == 5, test ) )
pass = false;
test++;
我假设它是单元测试代码的一部分,并断言cnt == 5,还计算测试次数和总结果(通过或失败)。
使用Junit,您不必手动处理测试次数或最终结果,您可以编写
assertEquals("count is correct", 5, cnt);
这也将产生有用的输出,以帮助确定失败的确切内容(例如错误计数的值)。
它似乎是在检查您在班级中声明了多少个字段,以及其中有多少是私人可见性。
如果你想知道&=
,这是JLS 15.22.2的引用。 布尔逻辑运算符&,^和| 。
对于&,如果两个操作数值都为真,则结果值为true; 否则,结果是错误的。
运营商&
和|
对于布尔人来说,是&&
( 15.23 )和||
鲜为人知的表兄弟 ( 15.24 )。 后两者是“有条件”的运营商; 它们是短路的,只有在实际需要时才评估右侧。
&&
运算符类似于&
(§15.22.2),但仅当其左侧操作数的值为true
时才计算其右侧操作数。
&=
是的化合物分配版本&
。 见JLS 15.26.2。 复合赋值运算符 。
形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次。
换句话说,这些是等价的(假设boolean b
):
b &= bool_expr;
b = b & bool_expr;
if (!bool_expr) b = false;
这也可能是你的问题( java.lang.Class#getDeclaredFields ):
返回
Field
对象的数组,这些对象反映由此Class
对象表示的类或接口声明的所有字段。 这包括公共,受保护,默认(包)访问和私有字段, 但不包括继承的字段 。
如果您还要计算继承的字段,则计数可能不正确。
在Java中,变量和方法的名称空间不会发生冲突。 所以看起来驱动程序既有变量又有一个名为“test”的方法。
如果没有test()方法和您自己的源代码,很难说出了什么问题,但看起来您的Square类中的字段数量是错误的。 (应该有五个。)
是的,似乎需要更多的字段来完成声明,这应该修复命名空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.