使用java,我有一个方法:
boolean shouldPointBeAdded(boolean excludePoint, shapeContainsPoint){
return excludePoint ^ shapeContainsPoint;
}
用作:
if(shouldPointBeAdded(excludePoint, shape.contains(point))
这用作if条件,但它的执行方式与我直接作为if条件执行XOR的方式相同。
注意:我已将XOR包装在一个测试和可读性的方法中。
运行单元测试用例时,使用方法shouldPointBeAdded()时,断言不会返回正确的值,但是当在if条件中直接使用XOR时,它们会返回正确的值。
思想??
感谢。
更新: 使shouldPointBeAdded()静态解决了感知问题,所以我认为问题在于模拟测试对象。</ p>
答案 0 :(得分:0)
mock \ spy'd对象设置错误。 它没有在正确的时间和不正确的对象初始化行为;这就是我所观察到的。
所以,它是:
when(spy.shouldPointBeAdded(excludePoints, shape.contains(mock(Point.class)))).thenCallRealMethod();
我将其更改为:
when(spy.shouldPointBeAdded(excludePoints, shape.contains(point)).thenCallRealMethod();
exlcludePoints和shape是传递给设置方法的真实对象,而不是模拟,而point是测试类成员变量。 在使用之前,必要时指定点。
for(Point pointInGrid : buildTenByTenGrid()) {
point = pointInGrid;
if(objectUnderTest.shouldPointBeAdded(excludePoints, shape.contains(point))) {
pointsInShape.add(point);
}
}
测试现在按预期工作。