Java 莫基托-无内部法的试验方法

Java 莫基托-无内部法的试验方法,java,spring,unit-testing,testng,mockito,Java,Spring,Unit Testing,Testng,Mockito,我有以下课程 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

我有以下课程

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{
受保护的字符串getEmailContent(字符串内容、字符串图像){
String result=content.toPrettyLook();//这是一个内部方法
结果+=”;
返回结果;
}
受保护的字符串getImageLocation(字符串图像){
//将图像写入光盘
返回新位置;
} 
}
公共类EmailManagerTest{
EmailManager EmailManager;
@试验
公共邮件内容(){
String result=emailManager.getEmailContent(“Hello World”);
}
}
  • 我应该在EmailManager上面添加什么注释@间谍@Mock或 @自动连线

  • 我如何告诉Mockito不要执行getImageLocation(getEmailContent调用的方法)并始终执行 返回而不是“新位置”?我看了很多文章,得到了很多东西 混淆了“when”“stub”“doReturn”


  • 你想要的是一个间谍:一个被部分模拟的物体。您想测试real
    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();
    
    不要忘记添加@Before方法,该方法调用
    MockitoAnnotations.initClass(this)


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

    这里你想要的是一个间谍:一个部分模拟的对象。您想测试real
    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();
    
    不要忘记添加@Before方法,该方法调用
    MockitoAnnotations.initClass(this)


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

    我尝试了您的代码,但正在执行getImageLocation方法!有什么原因吗?我尝试了你的代码,但是正在执行getImageLocation方法!有什么原因吗?