Java Multiple thenReturn在Mockito中工作不正常
我正在测试一个调用同一方法(Java Multiple thenReturn在Mockito中工作不正常,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我正在测试一个调用同一方法(db.getData())两次的方法。但我必须返回两个不同的值 Mockito.when(db.someMethod()).thenReturn(valueOne).thenReturn(valueTwo); 然后我尝试了多个thenReturn() 不幸的是,对于第一个和第二个db.getData()方法调用,我只得到了valueTwo。您没有显示太多上下文,但这里有一些想法: 确保db确实是一个模拟对象 使用调试器检查db.someMethod(
db.getData()
)两次的方法。但我必须返回两个不同的值
Mockito.when(db.someMethod()).thenReturn(valueOne).thenReturn(valueTwo);
然后我尝试了多个thenReturn()
不幸的是,对于第一个和第二个
db.getData()
方法调用,我只得到了valueTwo。您没有显示太多上下文,但这里有一些想法:
- 确保db确实是一个模拟对象
- 使用调试器检查db.someMethod()是否按预期调用了两次
- 您还可以使用
thenReturn(valueOne,valueTwo)代码>虽然这不会有什么区别
可能是您正在调试,当您想要获取断点行的数据时,您正在从mock获取数据,因此它将返回其中一个
thenReturn()
参数,因此当您恢复测试时,它将使用第二个参数对其进行测试
如果您怀疑它是否正常工作,我建议您一次性获取所有
thenReturn()
项,在您同意它们正常后,再次开始测试,不跟踪thenReturn()
项。如果您希望它为不同的调用返回两个不同的值,您可以这样做:Mockito.when(db.someMethod()).thenReturn(valueOne);db.someMethod();Mockito.when(db.someMethod()).thenReturn(valueTwo);db.someMethod();@PiotrPytlik这不正确,请参阅::“您可以为连续的方法调用设置不同的行为。最后一次存根(例如:thenReturn(“foo”))确定后续连续调用的行为。”“@Adrian抱歉,又超越了我自己。是的,我错了……我在创建valueOne和valueTwo(实际上是一个复杂的对象)时犯了一些错误。然后返回(valueOne,valueTwo)&然后返回(valueOne)。然后返回(valueTwo)它们都正常工作。
//you can set different behavior for consecutive method calls.
//Last stubbing (e.g: thenReturn("foo")) determines the behavior of further consecutive calls.
when(mock.someMethod("some arg"))
.thenThrow(new RuntimeException())
.thenReturn("foo");