方法 return 布尔形式异或

method return boolean form xor

使用java,我有一个方法:

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

用作:

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

这用作 if 条件,但它的执行方式与我直接作为 if 条件执行 XOR 的方式不同。

注意:为了测试和可读性,我将 XOR 封装在一个方法中。

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

想法??

谢谢。

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

mock \ spy'd 对象设置不正确。 它没有在正确的时间用不正确的对象初始化行为;这是我根据观察得出的结论。

所以,它是:

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

我改成:

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

exlcludePoints 和 shape 是真实对象,不是模拟对象,它们被传递到设置方法中,point 是一个测试 class 成员变量。 点在使用前根据需要分配。

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

测试现在按预期工作。