Структуры класса являются следующие:Почему этот тест JMock терпит неудачу?
public interface Sender {
void send(String note);
}
public interface Agent {
void sendNote(String note);
}
public class Emailer implements Sender {
void send(String note) {
//...do something
}
}
public class EmailAgent implements Agent {
void sendNote(String note) {
Sender sender = new Emailer();
sender.send();
}
}
Я выполнил свою JMock/JUnit тест так:
@Rule
public JUnitRuleMockery context = new JUnitRuleMockery();
Sender sender = context.mock(Sender.class);
@Test
public void test1() {
context.checking(new Expectations() {{
exactly(1).of(sender).send("test");
}});
new EmailAgent().sendNote("test");
}
По некоторым причинам, выше не удается, потому что он сказал, sender.send()
никогда не вызывается. Как это возможно?
Ваш 'новый EmailClient()' ничего не знает о mock 'sender'. Если вы передали его в метод, либо через конструктор, либо сам метод, он будет вести себя так, как вы этого хотите. Вместо этого вы создаете moker 'sender' в тестовом классе, а другой - в методе' test1'. –