在正在测试的类中,我的方法如下:
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中的语句中捕获参数。
任何想法或思想都将不胜感激。
我能够使用of mockito中的 Answer
或 doAnswer
解决它。
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));
}
希望它也会帮助他人。