[英]How to mock RestTemplate getForObject method using jmockit?
How to mock getForObject
method in RestTemplate
class using jmockit
- 如何使用jmockit
在RestTemplate
类中模拟getForObject
方法-
I am trying to do like this - 我正在尝试这样做-
@Test
public void test2DataClient() {
new MockUp<RestTemplate>() {
@Mock
public String getForObject(String url, Class<String> responseType, Object... urlVariables) {
return "{(\"error\": \"missing data id\", \"data_id\":2001)}";
}
};
}
But every time I am getting this error- 但是每次我遇到这个错误时
java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:
Any thoughts what wrong I am doing here? 有什么想法我在这里做错了吗?
UPDATE:- 更新: -
Full StackTrace - 全栈跟踪-
java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:
com.host.dataclient.test.DataTest$3#getForObject(String url, Class responseType, Object[] urlVariables)
at com.host.dataclient.test.DataTest$3.<init>(DataTest.java:649)
at com.host.dataclient.test.DataTest.test25dataclient(DataTest.java:649)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:602)
at java.lang.reflect.Method.invoke(Method.java:602)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
In fact, the signature of the @Mock
method does not match the signature of the mocked method, as the exception message says. 实际上,正如异常消息所示,@ @Mock
方法的签名与@Mock
方法的签名不匹配。
To see why, notice there is only one real implementation of the RestTemplate#getForObject(String, Class, Object[])
method. 要了解原因,请注意,只有一个真正的RestTemplate#getForObject(String, Class, Object[])
方法实现。 Then, consider what would happen for the following call: 然后,考虑以下调用会发生什么:
Integer i = restTemplate.getForObject("...", Integer.class);
Naturally, this call should not redirect to a @Mock
method having a return type of String
. 自然,此调用不应重定向到返回类型为String
的@Mock
方法。 So, the correct mock method should be: 因此,正确的模拟方法应为:
new MockUp<RestTemplate>() {
@Mock
<T> T getForObject(String url, Class<T> responseType, Object... urlVariables) {
return (T) "{(\"error\": \"missing data id\", \"data_id\":2001)}";
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.