Mockito when().thenReturn() 无法正常工作

2022-09-03 10:06:14

我有一个带有2个函数的类A:函数a()返回一个随机数。函数 b() 调用 a() 并返回返回的值。

在一次测试中,我写了这样:

A test = Mockito.mock(A.class)
Mockito.when(test.a()).thenReturn(35)
assertEquals(35,test.a())
assertEquals(35,test.b())

测试在第二个断言处失败。有谁知道为什么吗?

需要明确的是 - 这不是我真正的代码,而是一个简单的代码来解释我的问题


答案 1

由于类是模拟的,因此所有方法调用都不会转到实际对象。这就是为什么你的第二个断言失败的原因(我猜它可能返回了0)。A

溶液:

你可以做这样的事情

when(test.b()).thenCallRealMethod();

其他你可能喜欢spy

A test = spy(new A());
Mockito.when(test.a()).thenReturn(35);
assertEquals(35,test.a());
assertEquals(35,test.b());

答案 2

函数 b() 调用 a()

也许它确实在你的实际混凝土中,但在这种情况下没有被使用。这里只使用模拟。A

因此,您需要告诉模拟对于要调用的每个方法要执行的操作:

Mockito.when(test.b()).thenReturn(35);

推荐