繁体   English   中英

为什么此JMock测试失败?

[英]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不使用从任何地方获取的发件人; 它创建自己的。 所以:

  • 测试会创建一个模拟的发件人(称为“ a”)。
  • 然后,它调用sendNote ,后者创建第二个Sender(将其称为“ b”)。
  • 该方法返回,然后测试检查“ a”是否已调用了send -尚未,因为EmailClient不知道。

与其在EmailAgent.sendNote创建发件人, EmailAgent.sendNoteEmailAgent.sendNote创建一个构造函数,该构造函数将一个发件人并将其存储在实例字段中,然后在sendNote使用该字段。 然后,测试将其模拟的发件人传递给EmailAgent。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM