我有这样一个类,它使用Unirest API进行HTTP POST调用-
public class MyClass{
public MyObject getData(){
HttpResponse response = Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
.field("Field1", context.getParameter("value for field 1"))
.field("username", context.getParameter("username"))
.field("password", context.getParameter("password"))
.field("field 3", context.getParameter("field 3 value"))
.field("field 4", context.getParameter("field 4 value"))
.asJson();
}
}在模拟类中-在调用Unirest时,mockito中有一个HttpResponse对象要返回。我不想通过Unirest到达端点,并且希望返回我的自定义httpResponse。
HttpResonse<JsonNode> httpResponse; // my mocked response
Mockito.when(Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
.field("Field1", context.getParameter("value for field 1"))
.field("username", context.getParameter("username"))
.field("password", context.getParameter("password"))
.field("field 3", context.getParameter("field 3 value"))
.field("field 4", context.getParameter("field 4 value"))
.asJson()).thenReturn(httpResponse); // this is my custom response我已经对所有params的上下文进行了嘲弄,但是仍然会出现错误。
org.mockito.exceptions.misusing.WrongTypeOfReturnValue: HttpResponse不能由getParameter()返回 getParameter()应该返回字符串
是否有一种方法可以更容易地对第三方链接方法进行模拟,或者为实现提供更好的示例?谢谢!
发布于 2019-01-31 12:27:57
如果允许重构代码,最简单的方法是提取对受保护方法的静态调用:
public class MyClass{
public MyObject getData(){
HttpResponse response = postRequest();
}
protected HttpResponse postRequest(){
return Unirest.post(someURL).header("Content-Type", "application/x-www-form-urlencoded")
.field("Field1", context.getParameter("value for field 1"))
.field("username", context.getParameter("username"))
.field("password", context.getParameter("password"))
.field("field 3", context.getParameter("field 3 value"))
.field("field 4", context.getParameter("field 4 value"))
.asJson();
}
}然后在您的测试用例中,监视被测试的类并模拟受保护的方法:
public void test(){
MyClass myClass = Mockito.spy(new MyClass());
HttpResonse<JsonNode> httpResponse; // my mocked response
doReturn(httpResponse).when(myClass).postRequest();
...
}发布于 2020-02-13 19:54:25
我通过分别模拟每个多部分请求来摆脱NPE。例如:
@PrepareForTest({ Unirest.class})
public TestClass {
@Mock
private HttpRequestWithBody httpRequestWithBody;
@Test
public void testMethod() {
.
.
.
httpRequestWithBody = Mockito.mock(HttpRequestWithBody.class);
MultipartBody multipartUsernameBody = Mockito.mock(MultipartBody.class);
Mockito.when(httpRequestWithBody.field("username", "username@userdomain.com")).thenReturn(multipartUsernameBody);
MultipartBody multipartPasswordBody = Mockito.mock(MultipartBody.class);
Mockito.when(multipartUsernameBody.field("password", "Password123")).thenReturn(multipartPasswordBody);
.
.
.
}此外,您还必须在实际代码中相应地拆分请求。
https://stackoverflow.com/questions/54460130
复制相似问题