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

时间:2015-10-14 12:48:12

标签: java unit-testing mocking mockito

我有一个有两个功能的A类: function a()返回一个随机数。 function b()调用a()并返回返回的值。

在测试中我写了这个:

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

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

要清楚 - 这不是我真正的代码,而是一个解释我的问题的简单代码

3 个答案:

答案 0 :(得分:19)

由于类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());

答案 1 :(得分:4)

  

函数b()调用()

也许它在您的实际具体A中有效,但在这种情况下并未使用。这里只使用模拟。

因此,您需要告诉模拟您要为每个要调用的方法做些什么:

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

答案 2 :(得分:4)

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

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