PowerMockito验证永远不会调用静态方法

时间:2018-05-09 14:12:07

标签: java junit mockito powermockito

我正在编写一个JUnit测试来验证在方法流中永远不会调用静态方法(MyClass.myMethod())。我尝试过这样的事情:

  PowerMockito.verifyStatic(Mockito.never());
  MyClass.myMethod(Mockito.any());

这样做会收到UnfinisedVerificationException。如何测试MyClass.class在方法执行中没有任何交互?

2 个答案:

答案 0 :(得分:0)

如果尚未模拟类但您正在尝试验证其静态方法的调用,则会发生UnfinishedVerificationException。

PowerMockito.mockStatic(MyClass.class);
underTest.testMethod();
PowerMockito.verifyStatic(Mockito.never());
MyClass.myMethod(Mockito.any());
.
.
.

如果流程从未遇到对MyClass.myMethod()的调用

,则应该成功

答案 1 :(得分:0)

我无法使用Mockito.never()使它正常工作。

我能够使用NoMoreInteractions的实例来使其工作。

在调用生产方法并验证对模拟的静态方法的所有调用之后,使用verifyStatic的实例作为第二个参数来调用NoMoreInteractions

mockStatic(MyClassWithStatic.class);
when(MyClassWithStatic.myStaticMethod("foo")).thenReturn(true);

instanceOfClassBeingTested.doIt();

verifyStatic(MyClassWithStatic.class, times(1));
MyClassWithStatic.myStaticMethod("foo");

verifyStatic(MyClassWithStatic.class, new NoMoreInteractions());
MyClassWithStatic.myStaticMethod(Mockito.anyString());

如果要测试的类使用myStaticMethod以外的任何名称调用foo,则测试失败,并显示一条消息,指出存在未验证的调用。