当前位置: 首页 > 知识库问答 >
问题:

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

燕永昌
2023-03-14

我是一个新的Mockito,遵循这一点,并试图找出验证方法做什么。它似乎是用来确保所选方法被调用一次。我有下面的代码,通过查看代码,我可以发现我调用了addBook方法两次,所以为什么我要使用verify?我的意思是,在任何情况下,都很容易确保一个方法被称为oncem,那么为什么我们要使用verify方法呢?

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

共有1个答案

吕征
2023-03-14

设想一个管理帐户的类:

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。

 类似资料:
  • 问题内容: 我对JAX-WS进行了概述,并注意到了(和)的一些引用。 在什么情况下需要?(我认为JSR 109服务器?!) 问题答案: 是使用SUN的参考实现将Web服务作为标准存档部署在非Java EE5 Servlet容器上时所需的专有部署描述符。 Sun的RI 用作servlet上下文事件的侦听器和调度程序servlet。两者都必须在中声明。然后需要该文件为定义Web服务端点,以使其知道必须

  • 问题内容: 我在理解类中方法的含义时遇到问题。在下面的代码中,如果我使用该方法,则不使用它也会得到相同的结果。 为什么(或何时)需要使用它? 问题答案: 只创建一个对象 方法由调用

  • 问题内容: 当我尝试按照本指南进行SQLAlchemy Relation Example时:基本关系模式 我有这个代码 它运作良好,但是在指南中,该模型应为: 为什么我不需要或在我的示例中?什么时候应该使用其中一个? 问题答案: 如果使用,则无需在第二个表上声明关系。 如果 不 使用,并分别定义,则如果不使用,则sqlalchemy将不知道如何连接关系,因此修改一个也将修改另一个。 因此,在您的示

  • 我理解mockito.verify()用于确保使用所需参数调用模拟方法。但我不明白这其中的用意。我经常看到类似这样的测试: 测试验证在调用UserService的createUser方法时是否调用了UserDAO的create方法。看起来很荒唐。如果我改变了UserService的实现,使它不调用UserDAO的方法,那么即使实现是正确的,测试也会失败。 我承认在某些情况下,可能需要验证方法被调用

  • 问题内容: 我使用类只有很短的时间,编写方法时,我使所有变量都引用了self,例如self.foo。 但是,我在浏览《 wxPython in Action》 一书时发现,“ self”并没有一直使用。例如: 下面的一个确实使用“自我”。 如果我没记错的话,“自我”是指该类的特定实例,那么什么时候没有必要?有一般的经验法则吗? 问题答案: 您用于引用当前实例的属性。 您用于引用父类的方法。 如果仅