3

私は持っています:

Map<String, String> vars = new HashMap<String, String>();
String r = restOperations.getForObject(url, String.class, vars);

私のテストでは、RestOperationsをモックしようとします。

@Mock
RestOperations restOperations;

when(restOperations.getForObject(Matchers.anyString(), Matchers.eq(String.class), Matchers.notNull())).thenReturn("ok");

これはトリガーされません。

誰かが理由を見ますか?

4

2 に答える 2

7

問題はメソッドのオーバーロードにあると思います。getForObject3つの引数を取る2つのオーバーロードされたバージョンがあります。

<T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables);

<T> T getForObject(String url, Class<T> responseType, Object... uriVariables);

最初のものをモックしたいのに、実際には2番目のものをモックしています。notNull()静的メソッドの解決を支援するために、一致を明示的にキャストします。

when(restOperations.getForObject(
  Matchers.anyString(), Matchers.eq(String.class), (Map)Matchers.notNull())
).thenReturn("ok");

またはさらに良いことに、使用してanyMap()ください:

 when(restOperations.getForObject(
   Matchers.anyString(), Matchers.eq(String.class), Matchers.anyMap())
 ).thenReturn("ok");
于 2012-04-19T21:45:17.717 に答える
1

あなたの答えをありがとう、それは本当に役に立ちました。

以下は完全なソースコードであり、他の人にも役立つと思いました。

public class HandlerTest {

    private Handler handler;

    @Before
    public void setUp() {
        handler = new HandlerImpl();
    }

    @Test
    public void testMethodtoTest() {
        String param1 = "123456";
        String param2 = "3736272";
        String param3 = "838912";

        RestTemplate mock = Mockito.mock(RestTemplate.class);
        Mockito.when(mock.getForObject( Matchers.anyString(), Matchers.eq(String.class), Matchers.anyMapOf(String.class, String.class)) ).thenReturn("ok");
        handler.setRestTemplate(mock);

        String actualResponse = handler.MethodtoTest(param1, param2, param3);

        Assert.assertNotNull(actualResponse);
        Assert.assertEquals("ok",actualResponse);
}
于 2015-07-23T19:06:50.867 に答える