【问题标题】:Mockito - test method without inner methodMockito - 没有内部方法的测试方法
【发布时间】:2013-05-20 09:02:13
【问题描述】:

我有以下课程

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 调用的方法)并且始终 返回而不是“新位置”?我看了很多文章并得到了 在“何时”“存根”“doReturn”之间混淆

【问题讨论】:

    标签: java spring unit-testing testng mockito


    【解决方案1】:

    你想要的是一个 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) 的@Before 方法。

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

    【讨论】:

    • 我试过你的代码,但是getImageLocation方法正在执行!有什么原因吗?
    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多