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

如何用Mockito验证在测试过程中调用了SUT的另一个公共方法

史绍晖
2023-03-14
class A {

    public long a() {
        if(something) {
            return quicklyCalculatedResult
        } else {
            return b() run on separate thread, with this one blocked
        }
    }

    public long b() {} //doStuffOnCurrentThread;

}

我对b()有一套完整的测试,它完成了繁重的任务。不幸的是,我不得不做一个丑陋的想法,比如()(遗留代码),我不想复制所有的测试。方法b()的。此外,这两个都需要公开。

我想验证在某些情况下a()调用b(),但我不能这样做,beacause测试类不是mock。我需要一种方法来验证该方法是在真实对象上调用的,而不仅仅是在模拟对象上调用的。

共有1个答案

柯曜文
2023-03-14
A classUnderTest = mock(A.class);
when(classUnderTest.a()).thenCallRealMethod();

classUnderTest.a();
verify(classUnderTest).b()
val classUnderTest = mock(A::class.java)
`when`(classUnderTest.a()).thenCallRealMethod()

classUnderTest.a()
verify(classUnderTest).b()
val classUnderTest = mock<A>()
doCallRealMethod().whenever(classUnderTest).a()

classUnderTest.a()
verify(classUnderTest).b()
val classUnderTest = spyk<A>()
every { classUnderTest.b() } returns 1L

classUnderTest.a()
verify { classUnderTest.b() }
 类似资料:
  • 我正在尝试测试,只有在调用case的情况下,否则不会调用该方法。 但这会调用我的,并在内抛出空指针。因为我的行为不会调用,所以我如何在不调用的情况下测试它。

  • 问题内容: 假设我有一个带有两个我不在乎的方法的类,这称为… 下面的两个(仍然来自我的应用程序中的另一个类)都应该通过我的测试: 我不在乎哪个被调用,我只想调用两个变体之一。 在Mockito中,我通常可以执行以下操作: 要么: 是否有一种本地方式说“验证 一个或另一个 至少发生一次”? 还是我必须做一些粗略的事情: 问题答案: 您可以结合使用:

  • 当有两个公共方法并且一个方法调用同一个类中的另一个公共方法时,测试方法的方法是什么? 在这种情况下,我应该如何编写单元测试? 一个例子 这个例子并没有显示所涉及的方法的复杂性,而是概念的复杂性。 我应该分别测试加法和乘法吗?如果我只测试乘法,我觉得我们错过了不能提供参数的情况。 假设要分别测试和,我应该能够模拟?这怎么可能? 假设要分别测试乘法和加法,我不应该模拟,我应该让加法按原样执行吗。如果是

  • 考虑以下代码: 我想做的是,在异常测试中,标记我希望调用doSomething1()。然而,在转换器上抛出异常。convert(),这意味着永远不会调用verify()调用。因此,verifyNoMoreInteractions()在after()中失败。 注意:这是一个非常通用的示例,用于隐藏我们的任何内部代码。

  • 我对DB2中的过程有疑问。我使用“create procedure”创建了一个存储过程,在这个存储过程中,我还有一个使用“declare procedure”声明的存储过程。但是,这个由declare创建的过程不能使用“call”调用。 当我尝试运行该过程时,Db2返回: [代码:-440,SQL状态:42884]DB2 SQL错误:sqlcode=-440,sqlstate=42884,sqle

  • 我在我的服务层有一个方法: [1]这一行获取条形码,比如然后调用另一个类中的一个方法,该方法从数据库中检索有关该项目的信息,执行计算并返回价格。可能的值可以类似于。 [2]按价格对所有值进行升序排序。因此,如果列表包含和和,则将其排序为和。 当我尝试测试此方法时,当调用时,我得到空指针异常。我如何测试这个方法?我试着搜索并找到了一些关于使用mockito的问题和答案,但我不知道如何实现它。 我目前