2013-05-20 7 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 аннотацию:

@Spy 
private EmailManager emailManager = new EmailManager(); 

Не забудьте добавить @Before метод, который вызывает MockitoAnnotations.initClass(this).

Mockito очень хорошо документирован. Прочитано the documentation.

+0

Это будет работать в Mockito 1,8 или выше. – Zutty

+0

Я пробовал ваш код, но метод getImageLocation выполняется! любая причина? – Dejell

+0

Отправьте свой код. Я просто проверил мой, и он отлично работает. –

Смежные вопросы