我们什么时候需要使用Mockito的验证方法?

时间:2014-10-05 10:25:29

标签: java junit mockito

我是Mockito的新手,关注this并试图找出verify method does。它似乎用于确保调用所选方法一次。我有以下代码,通过查看代码,我可以找到我调用addBook方法两次,所以我为什么要使用验证?我的意思是在任何情况下都很容易确保一个方法被调用一次,那么我们为什么要使用验证方法?

String isbn = mockedBookDAL.addBook(book1);
        assertNotNull(isbn);
        isbn = mockedBookDAL.addBook(book1);
        assertNotNull(isbn);
        verify(mockedBookDAL).addBook(book1);
        assertEquals(book1.getIsbn(), isbn);

1 个答案:

答案 0 :(得分:2)

想象一个管理帐户的课程:

public class Account {
  private Logger logger;
  public Account(Logger logger) {
    this.logger = logger;
  }
  ...

  public void withdraw(int amount) {
    ...
    logger.logWithdrawal(amount);
    ...
  }
}

所以为了测试,确实记录了撤销,你嘲笑记录器并验证交互:

public class AccountTest {
  @Test
  public void withdrawalShouldBeLogged() {
    Logger logger = mock(Logger.class);
    Account cut = new Account(logger);

    int amount = 10;
    cut.withdraw(amount);

    verify(logger).logWithdrawal(amount);
  }
}

这种形式的断言也被称为间谍。

进一步的通知:每个测试方法通常只应声明一件事。验证间谍交互就是断言,所以你通常不应该在同一个方法中使用verify和assert。