班级结构如下:
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()
。这怎么可能?
答案 0 :(得分:1)
EmailAgent不使用从任何地方获取的发件人;它创造了自己的。所以:
sendNote
,创建第二个发件人(称之为“b”)。send
- 它没有,因为EmailClient不知道它。您应该在EmailAgent中创建一个构造函数,该构造函数接收发件人并将其存储在实例字段中,然后在EmailAgent.sendNote
中使用该字段,而不是在sendNote
中创建发件人。然后,测试将其模拟的发件人传递给EmailAgent。