在测试类中,我有一个方法如下:
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语句中进行参数捕获。
任何想法或想法都将受到高度赞赏。
答案 0 :(得分:0)
我可以使用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));
}
希望它也能帮助别人。