我有一个有两个功能的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())
第二个断言测试失败。有谁知道为什么?
要清楚 - 这不是我真正的代码,而是一个解释我的问题的简单代码
答案 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)
。那你的代码工作正常