簡體   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