我正在测试一个调用两次相同方法(db.getData())的方法。但是我必须返回两个不同的值。

       Mockito.when(db.someMethod()).thenReturn(valueOne).thenReturn(valueTwo);


然后,我尝试了多个thenReturn()

不幸的是,对于第一个和第二个db.getData()方法调用,我只能得到valueTwo。

最佳答案

您没有显示很多上下文,但是这里有一些想法:


确保db实际上是一个模拟对象
使用调试器检查db.someMethod()是否被两次调用了
您也可以使用thenReturn(valueOne, valueTwo);,尽管那没有什么区别


我怀疑您的方法被调用了两次以上,并且您错过了第一个调用(返回valueOne),而仅查看后续调用(都将返回valueTwo)。

参见the API

 //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");

07-21 17:35