为什么这个java测试读起来是false而不是true



在java中,我有一个测试,其中有几行代码:

StrategySlide strategySlide = mock(StrategySlide.class);
assertTrue(strategySlide.canSlide(board, fromCoords, toCoords));

这是canSlide代码的一部分(我只是把return true放在顶部,以确保它总是返回true(:

abstract public class StrategySlide implements StrategyFactoryI {
public boolean canSlide(Board board, Coordinates from, Coordinates to) {
return true;
}
}

然而,在只运行这个测试时,我得到了以下输出:

expected: <true> but was: <false>
Expected :true
Actual   :false

我不知道为什么它读起来是假的,而我只是返回真的。有人知道这是怎么发生的吗?

这是因为您正在模拟strategySlide,而Mockito默认情况下会为返回boolean的模拟方法返回false

来自文件:

默认情况下,对于所有返回值的方法,mock将返回null、基元/基元包装值或空集合(视情况而定(。例如,0表示int/Integer,false表示boolean/boolean

如果你想测试实际的实现,那么你不应该模拟StrategySlide,而是通过正常的方式创建一个新的实例(例如new StrategySlide()(。

如果你想使用Mockito返回不同的值,你可以使用:

when(strategySlide.canSlide(any(), any(), any()).thenReturn(true);

(when()来自Mockito.when()any()来自ArgumentMatchers.any()(

最新更新