当前位置: 首页 > 面试题库 >

Mockito验证在我的情况下一次调用一个函数

罗昕
2023-03-14
问题内容

我正在使用Mockito编写我的测试用例。我有一个简单的类,其中包含countPerson(boolean)我要测试的功能:

public class School {
  //School is a singleton class.

  public void countPerson(boolean includeTeacher) {
       if (includeTeacher) {
          countIncludeTeacher();
          return;
       }
       countOnlyStudents();
  }

  public void countIncludeTeacher() {...}
  public void countOnlyStudents() {...}
}

在单元测试中,我要测试countPerson(boolean)功能:

public class SchoolTest{
   private School mSchool;
   @Before
   public void setUp(){
      mSchool = School.getInstance();
   }
   @Test 
   public void testCountPerson() {
       mSchool.countPerson(true);
       //How to test/verify countIncludeTeacher() is invoked once?
   }
}

countIncludeTeacher()在我的测试案例中,如何使用Mockito进行检查/验证?


问题答案:

您将不得不使用间谍。这里的问题是您要验证是否在
真实
对象而非模拟对象上调用了方法。您不能在此处使用模拟,因为它将对类中的所有方法进行存根,因此countPerson缺省情况下也对存根不执行任何操作。

@Test 
public void testCountPerson() {
    School school = School.getInstance();
    School spySchool = Mockito.spy(school);
    spySchool.countPerson(true);
    verify(spySchool).countIncludeTeacher();
}

但是,请注意,使用间谍程序时应格外小心,因为除非经过特殊处理,否则实际方法都会被调用。引用Mockito Javadoc:

真正的间谍应该 小心谨慎 地使用,例如在处理遗留代码时。



 类似资料:
  • 我有一个四叉树,我想在几个不同的机器上使用它。调用构造函数(即构建树)需要很长时间。我不想每次我需要使用它的时候都建这棵树。 我正在寻找一种方法,将我的树持久保存在硬盘中,发送到每个节点,然后快速将其加载到内存中,以便执行查找。 序列化能帮助我吗?我知道我可以序列化树,把它保存到磁盘上,然后反序列化(这就是我对序列化的全部了解)。据我所知,反序列化步骤需要一个默认的构造函数来构建树。因为构建树的计

  • 我正在尝试测试,只有在调用case的情况下,否则不会调用该方法。 但这会调用我的,并在内抛出空指针。因为我的行为不会调用,所以我如何在不调用的情况下测试它。

  • 我的代码: }在这个特定的测试中没有失败,但是当我运行这个套件时,Mockito会告诉我不正确使用匹配器的情况。 我也可以做一些类似的事情:

  • 我试图验证一个模拟的方法()被调用了2次。不管出于什么原因,Mockito从来没有失败过测试,不管期望调用的次数是多少。我是这样使用它的:

  • 当尝试将Mockito与spring一起使用时,通过bean声明创建Mock对象... ...我在调用mockito时发现了一些奇怪的行为。当多次没有重置Mock对象时,例如: 在测试过程中(在同一个模拟上)多次调用此代码(“mockito.when”)时,测试就会失败并出现错误(BadSqlGrammerException即使该异常实际上是预期的--如果不抛出异常,我会得到一个失败,并且手动抛出

  • 用户应该输入一个4位数的数字,我需要反向它我导入扫描并收到了来自用户的答案,但是如何反向呢?例如,如果用户键入9876,它将打印6789?我应该用%吗?