这个java代码如何执行代码?

时间:2010-02-24 06:06:36

标签: java

我的编程课程中有一个项目,但我没有通过测试用例。我查看测试驱动程序并找到它:

 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 

我没有通过这些测试用例,只是想知道原因。感谢

5 个答案:

答案 0 :(得分:3)

如果您询问&=赋值运算符,只有当右侧参数也为真时才会使变量保持为真(如果它已经为假,则它将保持为假)。它就像+=一样,a &= ba = 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);

这也会产生有用的输出,以帮助确定失败的确切内容(例如错误计数的值)。

答案 1 :(得分:1)

它似乎在检查您在班级中声明了多少个字段,以及其中有多少是隐私可见性。

答案 2 :(得分:1)

如果您对&=感到疑惑,请点击JLS 15.22.2. Boolean Logical Operators &, ^, and |引用。

  

对于&amp ;,如果两个操作数值都为真,则结果值为true;否则,结果是错误的。

布尔值的运算符&|&&15.23)和||15.24)中鲜为人知的表兄弟。后两者是“有条件”的运营商;它们是短路的,只有在实际需要时才评估右侧。

  

&&运算符与&(第15.22.2节)类似,但仅当其左侧操作数的值为true时才计算其右侧操作数。

&=&的复合赋值版本。请参阅JLS 15.26.2. Compound Assignment Operators

  

形式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对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但不包括继承字段

如果您还要计算继承的字段,则计数可能不正确。

答案 3 :(得分:0)

在Java中,变量和方法的名称空间不会发生冲突。所以看起来驱动程序既有变量又有一个名为“test”的方法。

如果没有test()方法和您自己的源代码,很难说出了什么问题,但看起来您的Square类中的字段数量是错误的。 (应该有五个。)

答案 4 :(得分:0)

是的,似乎需要更多的字段来完成声明,这应该修复命名空间。

相关问题