[英]Junit and Jmock to test Springs TransactionSynchronizationManager
[英]Why this JMock test is failing?
类结构如下:
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()
。 这怎么可能?
EmailAgent不使用从任何地方获取的发件人; 它创建自己的。 所以:
sendNote
,后者创建第二个Sender(将其称为“ b”)。 send
-尚未,因为EmailClient不知道。 与其在EmailAgent.sendNote
创建发件人, EmailAgent.sendNote
在EmailAgent.sendNote
创建一个构造函数,该构造函数将一个发件人并将其存储在实例字段中,然后在sendNote
使用该字段。 然后,测试将其模拟的发件人传递给EmailAgent。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.