Mockito when().thenReturn() 不能正常工作

Mockito when().thenReturn() doesn't work properly

我有一个具有 2 个功能的 class A: 函数 a() 其中 return 是一个随机数。 函数 b() 调用 a() 和 return 值 returned.

在测试中我写了这个:

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

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

要明确 - 这不是我的真实代码,而是解释我的问题的简单代码

function b() which calls a()

也许在您的实际混凝土中确实如此 A,但在本例中并未使用。这里只使用模拟。

因此您需要告诉 mock 为您要调用的每个方法做什么:

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

因为当你用 test.a() 调用它时你只有一个模拟。

您必须添加 Mockito.when(test.b()).thenReturn(35)。那么你的代码工作正常

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

解决方案:

你可以做类似

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

否则你可以spy喜欢

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