方法语句中的Mockito参数捕获

时间:2017-09-19 02:28:13

标签: unit-testing parameters arguments mockito stub

在测试类中,我有一个方法如下:

public RedirectView directToUrl()
    {
        URL url = urlUtils.createUrl( x.getPrefix(), new URLMaker( "/my/relative/url" ) );
        return new RedirectView( url.toString() );
    }

请注意,该方法本身没有任何参数。我正在尝试编写一个单元测试,用于验证方法体第一行中传递的参数值/my/relative/url。在测试中,方法urlUtils.createUrl不能在没有模拟的情况下按原样调用(具有副作用并且取决于多个外部事物)。在那,我认为我不能在Mockito中的when-then语句中进行参数捕获。

任何想法或想法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我可以使用Mockito中的AnswerdoAnswer解决此问题。

public void test_directToUrl()
    {
        final String expRelUrl = "/my/relative/URL";

        Answer<URL> url = new Answer<URL>() {
            public URL answer(InvocationOnMock invocation) throws Throwable {
                URLMaker um = invocation.getArgumentAt(1, URLMaker.class);
                assertThat(um.getRelativeUrl(), equalTo(expRelUrl));
                return new URL("random_prefix" + um.getRelativeUrl());
            }
        };

        when( urlUtils.createUrl( Mockito.any(), Mockito.any() ) )
                .thenAnswer( url );
        RedirectView redirectView = directToUrl();
        assertThat(redirectView.getUrl(), containsString(expRelUrl));
    }

希望它也能帮助别人。