如何在Mockito中忽略一个void方法中的几个void方法调用

qgzx9mmu  于 2023-10-18  发布在  其他
关注(0)|答案(3)|浏览(207)

我正在测试一个void方法,它碰巧调用了一个类中的其他几个void方法(所有这些方法都在同一个类中)。方法是沿着这些线.

public void methodToTest() {
   methodA();
   methodB();
}

void methodA() {
   methodA1();
   methodA2();
   methodA3();
}

我想做的是让上面的methodA()什么都不做。也就是说,我希望methodA()基本上是这样的:

void methodA() { }

我在methodA()上试过doThrow()doAnswer(),但都没有用。就好像这两者都被完全忽略了。
我试过的一个例子...

doThrow(new RuntimeException()).when(mockedClass).methodA();

有没有一种方法可以只使用Mockito?我无权更改正在修改的类。

x4shl7ld

x4shl7ld1#

如果你想让methodB仍然执行,而methodA什么也不做。这将做到这一点:

TestClass spy = spy(new TestClass());
doNothing().when(spy).methodA();
spy.methodToTest();
jhiyze9q

jhiyze9q2#

@Mock
 ApplicationClass applicationClass; 

 Mockito.doNothing().when(applicationClass).myMethod(Matchers.any(Object.class));
flvlnr44

flvlnr443#

只有当你有一个返回类型时,使用间谍才能帮助你。您可以使用类的模拟和doCallRealMethod来获得所需的效果。

public void methodToTestTest() {
    MockedClass mockedClass = mock(MockedClass.class);
    doCallRealMethod().when(mockedClass).methodToTest();

    mockedClass.methodToTest();

    verify(mockedClass).methodA();
    verify(mockedClass).methodB();
    verify(mockedClass, never()).methodA1();
    verify(mockedClass, never()).methodA2();
    verify(mockedClass, never()).methodA3();
}

相关问题