Mockito静态方法验证InOrder

Joh*_*ohn 3 java junit mockito

我正在尝试验证 InOrder 类中存在的静态方法。下面是具有一些静态方法的示例类

public class SampleClass {
  public static void staticMethod1(Param1 param)
  {
     //doSomething
  }
  public static void staticMethod2(Param2 param)
  {
     //doSomething
  }
  public static void staticMethod2(Param3 param)
  {
     //doSomething
  }
}

public class parent{
  public void method() {
    SampleClass.staticMethod1(...);
    SampleClass.staticMethod2(...);
    SampleClass.staticMethod3(...);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样

@Test
public void test(){
  try (MockedStatic<SamplClass > mockSamplClass = mockStatic(SamplClass .class, Answers.CALLS_REAL_METHODS))
  {
    //doStuff
    mockSampleClass.verify(()->SampleClass.staticMethod1(...));
    mockSampleClass.verify(()->SampleClass.staticMethod2(...));
    mockSampleClass.verify(()->SampleClass.staticMethod3(...));
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法对这三个静态方法进行InOrder验证?由于 Mockito.inOrder 仅接受模拟类型,而不接受 MockedStatic 类型。

现在我正在 Mockito 中寻找不涉及 PowerMockito 的答案。

Juf*_*ufr 6

对于那些像我一样在 Google 上发现这个问题作为第一个结果的人,现在 Mockito 支持这个。使用你的例子:

@Test
public void test(){
  try (MockedStatic<SamplClass > mockSamplClass = mockStatic(SamplClass.class, Answers.CALLS_REAL_METHODS)) {
    //doStuff
    InOrder inOrder = Mockito.inOrder(SamplClass.class);
    inOrder.verify(mockSampleClass, ()-> SampleClass.staticMethod1(...));
    inOrder.verify(mockSampleClass, ()-> SampleClass.staticMethod2(...));
    inOrder.verify(mockSampleClass, ()-> SampleClass.staticMethod3(...));
  }
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅Mockito github 问题