2016-11-07 71 views
-4

使用Java,我有一个方法:方法返回布尔形式XOR

boolean shouldPointBeAdded(boolean excludePoint, shapeContainsPoint){ 
    return excludePoint^shapeContainsPoint; 
} 

用作:

if(shouldPointBeAdded(excludePoint, shape.contains(point)) 

这被用作if条件,但它不执行相同的方式就好像我是直接做XOR一样的if条件。

注意:我已将XOR包装在测试和可读性的方法中。

运行单元测试用例时,assert在使用方法shouldPointBeAdded()时不会返回正确的值,但是当直接在if条件中使用XOR时,它们会返回正确的值。

想法??

谢谢。

更新: 使shouldPointBeAdded()static解决感知问题,所以我认为问题在于模拟测试对象。

+2

这是如何编译的? 'shapeContainsPoint'之前需要'boolean'。 –

+2

您的代码无法使用。除此之外,你不使用正文中的方法参数。 –

+1

我用你的方法(纠正其他人已经注意到的错误),并进行了成功的测试。请更正您的代码,如果仍然失败,请向我们展示您的单元测试。 –

回答

0

模拟\间谍对象被错误地设置。 它没有在正确的时间和不正确的对象的行为初始化;这是我从我所观察到的信仰中相信的。

所以,它是:

when(spy.shouldPointBeAdded(excludePoints, shape.contains(mock(Point.class)))).thenCallRealMethod(); 

我将其更改为:

when(spy.shouldPointBeAdded(excludePoints, shape.contains(point)).thenCallRealMethod(); 

exlcludePoints和形状是真正的对象,而不是嘲笑,被传递到一个设置方法,并点一个测试类成员变量。 点在使用前根据需要进行分配。

for(Point pointInGrid : buildTenByTenGrid()) { 
      point = pointInGrid; 
      if(objectUnderTest.shouldPointBeAdded(excludePoints, shape.contains(point))) { 
       pointsInShape.add(point); 
      } 
     } 

测试现在按预期工作。