Проверка статического метода Mockito в порядке

#java #junit #mockito

#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(...);
  }
}
 

И мой тест выглядит так

 @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(...));
  }
}
 

Есть ли какой-либо способ выполнить проверку по порядку для трех статических методов?
Поскольку Mockito.inOrder принимает только фиктивные типы, а не фиктивные статические типы.

Прямо сейчас я как бы ищу ответы в Mockito, не связанные с PowerMockito.

Комментарии:

1. Вам нужно исправить свой дизайн. Что делают эти «статические методы», которые являются недействительными? Это пахнет побочными эффектами, поэтому проверьте эти побочные эффекты напрямую. Если вы не можете, это признак того, что побочные эффекты не должны быть скрыты в статических методах.

2. Это тоже не выглядит хорошим тестовым примером.

3. Да, это проблема, это устаревший код, и он не сможет обновить код / дизайн. Эти методы имеют дело с закрытием объектов, связанных с sql. В настоящее время я пытаюсь перейти с jmockit на mockito. В jmockit они были объявлены в блоке VerificationInOrder.

Ответ №1:

Для тех, кто нашел этот вопрос в качестве первого результата в 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(...));
  }
}
 

Для получения дополнительной информации см. Выпуск Mockito github