【发布时间】:2016-02-16 09:00:11
【问题描述】:
类结构如下:
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() 从未被调用过。这怎么可能?
【问题讨论】:
-
您的
new EmailClient()对模拟sender对象一无所知。如果您将它传递给方法,无论是通过构造函数还是方法本身,它都会按照您的意愿行事。相反,您在测试类中创建模拟sender并在test1方法中创建另一个模拟。