我有以下课程
public class EmailManager{
protected String getEmailContent(String content,String image){
String result = content.toPrettyLook(); //this is an inner method
result+="<img src='" + +"' />";
return result;
}
protected String getImageLocation(String image){
//write image to disc
return newLocation;
}
}
public class EmailManagerTest{
EmailManager emailManager;
@Test
public void testEmailContent(){
String result = emailManager.getEmailContent("Hello World");
}
}
我应该在EmailManager上面添加什么注释? @Spy @Mock或 @Autowired?
如何告诉Mockito不要执行getImageLocation(getEmailContent调用的方法)并始终 返回而不是“新位置”?我看到很多文章并得到了 混淆了“何时”“存根”“doReturn”
答案 0 :(得分:3)
你想要的是一个间谍:一个部分模拟的对象。您想要测试真正的getEmailContent()
方法,但是您想要存根同一对象的getImageLocation()
方法。所以测试看起来应该是
public class EmailManagerTest{
private EmailManager emailManager;
@Test
public void testEmailContent(){
emailManager = spy(new EmailManager());
doReturn("new location").when(emailManager).getImageLocation("someImage");
String result = emailManager.getEmailContent("Hello World", "someImage");
// assertions ...
}
}
如果您想使用注释让Mockito为您创建间谍,那么您可以使用间谍注释:
@Spy
private EmailManager emailManager = new EmailManager();
不要忘记添加一个调用MockitoAnnotations.initClass(this)
的@Before方法。
Mockito有很好的记录。阅读the documentation。