簡體   English   中英

如何使用jmockit模擬RestTemplate getForObject方法?

[英]How to mock RestTemplate getForObject method using jmockit?

如何使用jmockitRestTemplate類中模擬getForObject方法-

我正在嘗試這樣做-

   @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)}";
        }
    };  
}

但是每次我遇到這個錯誤時

java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:

有什么想法我在這里做錯了嗎?

更新: -

全棧跟蹤-

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)

實際上,正如異常消息所示,@ @Mock方法的簽名與@Mock方法的簽名不匹配。

要了解原因,請注意,只有一個真正的RestTemplate#getForObject(String, Class, Object[])方法實現。 然后,考慮以下調用會發生什么:

Integer i = restTemplate.getForObject("...", Integer.class);

自然,此調用不應重定向到返回類型為String@Mock方法。 因此,正確的模擬方法應為:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM