调用同一个模拟方法时如何返回不同的结果?



我有一个调用的方法,它连接到另一个服务器,每次调用它时,它都会返回不同的数据。
我正在为调用该方法的类编写单元测试。我已经嘲笑了那个类,我希望它返回存根结果。它实际上使用doReturn工作,但它每次都返回相同的数据。我希望它返回不同的数据,我希望能够指定它应该是什么。

我尝试使用"doReturn - when"并且它可以工作,但我无法让它返回不同的结果。我不知道该怎么做。

我还尝试使用"when-thenReturn",这是我在StackOverflow上找到的解决方案。有了它,我可以指定每次调用相同的方法时都会得到不同的响应。

问题是我收到编译错误

未为类型OngoingStubbing<MyClass>定义方法 XXX

JSONArray jsonArray1 = { json array1 here };
JSONArray jsonArray2 = { json array2 here };
// Works but return the same jsonArray1 every time:
MyClass MyClassMock = mock(MyClass.class);
Mockito.doReturn(jsonArray1)
.when(MyClassMock).getMyValues(any(List.class), any   (String.class), any(String.class),
any(String.class),
any(String.class));
// Does not work:
when(MyClassMock).getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class)).thenReturn(jsonArray1, jsonArray2);

// Compile error:
// The method getMyValues(any(List.class), any(String.class), any (String.class), any(String.class), any(String.class)) is undefined for the type OngoingStubbing<MyClass>

我收到编译错误:

方法getMyValues(any(List.class), any(String.class), any(String.class), any(String.class), any(String.class)) 未定义 对于类型进行存根

对于普通模拟,您可以使用如下内容:

when(mockFoo.someMethod())
.thenReturn(obj1, obj2)
.thenThrow(new RuntimeException("Fail"));

如果您使用的是 spy() 和 doReturn() 而不是 when() 方法:

在不同的调用中返回不同的对象需要的是:

doReturn(obj1).doReturn(obj2).when(this.client).someMethod();

确保将模拟 + 其方法放在when中:

when(MyClassMock.getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class))
.thenReturn(jsonArray1)
.thenReturn(jsonArray2);

首先,您需要将模拟方法放入 when:

when(MyClassMock.getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class)).thenReturn(...);

此外,如果您想更多地控制返回的内容(例如,根据方法的输入参数,您应该使用 Answer 而不仅仅是返回值。

所以我认为这将是一个更好的解决方案:

when(MyClassMock.getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class)).thenAnswer(new Answer<JSONArray> {/*Add implementation here*/});

也许这篇文章可以帮助使用 Mockito 的答案类。

最后一个建议奏效了!

Mockito.doReturn(obj1).doReturn(obj2).when(this.client).someMethod();

感谢大家的帮助!/一月

相关内容

  • 没有找到相关文章

最新更新