我调用了一个方法,它连接到另一个服务器,每次调用它,它都返回不同的数据。
我正在为调用该方法的类编写一个单元测试。我已经嘲笑了那个类,我希望它返回存根结果。它实际上使用doBack
工作,但是它每次都返回相同的数据。我希望它返回不同的数据,我希望能够指定它应该是什么。
我试着使用“doReturn-when”,它可以工作,但我无法让它返回不同的结果。我不知道怎么做。
我还尝试使用“when-thenReturn”,这是我在StackOverflow上找到的解决方案。有了它,我可以指定每次调用同一个方法时得到不同的响应。
问题是我得到一个编译错误
方法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>
我得到编译错误:
方法getMyValue(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();
首先,您需要将mocked方法放在time中:
when(MyClassMock.getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class)).thenReturn(...);
此外,如果您希望对返回的内容进行更多控制(例如,根据方法的输入参数,您应该使用答案,而不仅仅是返回值)。
所以我认为这是一个更好的解决方案:
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的答案类。
当出现以下情况时,请确保将模拟its方法放在中:
when(MyClassMock.getMyValues(any(List.class),
any(String.class), any(String.class),
any(String.class),
any(String.class))
.thenReturn(jsonArray1)
.thenReturn(jsonArray2);
问题内容: 我正在运行以下MySQL查询,以查找没有手册(且车轮有黑轮等)的汽车 查询的结果看起来正确,但是它两次返回ID为27的汽车。如何更改查询,以使所有结果都是唯一的(没有重复项)? 问题答案: 假定这是唯一的主键,那么其中的一种联接将导致笛卡尔乘积。也就是说:或包含多个匹配项。 子查询通常是消除笛卡尔积的好工具。下面的示例查询显示了两种使用子查询的方法。 第一个子查询可确保我们只查看在20
我有一个类,它有以下实现: 如您所见,方法调用,然后在返回结果之前执行一些逻辑。 当我试图模拟这个存储库进行单元测试时,我很难从中获得结果,因为它总是作为空引用异常而失败。 以下是单元测试: 如何使此测试工作,使模拟方法在调用被模拟的方法之后执行一些逻辑?
我想mock接受对象参数的方法。此对象参数是从动态创建的。不会返回预期的结果,尽管这两个对象具有相同的数据,但只是不同的哈希代码。 有没有什么方法来模拟方法,使它能够以预期的结果响应?
如何模拟返回已强制转换的模拟对象的方法。 试验方法。
问题内容: 因此,我正在像这样在类级别上将模拟对象创建为静态变量…在一个测试中,我想返回某个值,而在另一个测试中,我希望它返回一个不同的值。我遇到的问题是,似乎我需要重建模拟才能使其正常工作。我想避免重建模拟,只在每个测试中使用相同的对象。 在第二个测试中,当调用testObj.bar()时,我仍然收到0作为值。解决此问题的最佳方法是什么?请注意,我知道我可以在每个测试中使用不同的模拟,但是,我必
我有一些测试方法: 当我尝试运行此方法时,出现了异常: 我怎么能嘲弄这种方法呢?