2013-05-20 30 views
0

测试方法,我有以下类的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 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”之间的混淆

回答

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(); 

不要忘记添加@Before方法,其中调用MockitoAnnotations.initClass(this)

Mockito是非常有据可查的。阅读the documentation

+0

这将工作在Mockito 1.8或以上。 – Zutty

+0

我试过你的代码,但正在执行getImageLocation方法!任何原因? – Dejell

+0

发布您的代码。我只是测试了我的,它工作正常。 –