多个然后返回在Mockito中无法正常工作

时间:2015-11-26 09:23:18

标签: java unit-testing mocking mockito

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

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

然后我尝试了多个thenReturn()

不幸的是,我只获得了第一个和第二个的价值。第二个db.getData()方法调用。

2 个答案:

答案 0 :(得分:3)

你没有展示很多背景,但这里有一些想法:

  • 确保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");

答案 1 :(得分:0)

可能你正在调试,当你想获取breakPoint行的数据时,你是从mock获取的,所以它会返回其中一个thenReturn()参数,所以当你恢复测试时,它会用第二个参数测试它。

我推荐你,如果你怀疑它是否正常工作,一次获取所有thenReturn()项目,之后你同意他们没问题,再次开始测试,没有跟踪thenReturn()项目。