0

我有以下课程

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");
  }
}
  1. 我应该在 EmailManager 上方添加什么注释?@Spy @Mock 还是 @Autowired?

  2. 如何告诉 Mockito 不要执行 getImageLocation (由 getEmailContent 调用的方法)并始终返回而不是“新位置”?我看了很多文章,对“when”“stub”“doReturn”感到困惑

4

1 回答 1

3

你在这里想要的是一个 Spy :一个部分模拟的对象。你想测试真正的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,那么你可以使用 Spy 注解:

@Spy
private EmailManager emailManager = new EmailManager();

不要忘记添加一个调用MockitoAnnotations.initClass(this).

Mockito 有很好的文档记录。阅读文档

于 2013-05-20T09:16:08.250 回答