Mockito позволяет нам создавать макеты объектов. Поскольку статический метод принадлежит классу, в Mockito нет возможности имитировать статические методы. Однако мы можем использовать PowerMock вместе с платформой Mockito для моделирования статических методов.
Mockito Имитирует статический метод с использованием PowerMock
PowerMock предоставляет различные модули для расширения платформы Mockito и запуска тестовых примеров JUnit и TestNG.
Обратите внимание, что PowerMock еще не поддерживает JUnit 5, поэтому мы создадим тестовые случаи JUnit4. Мы также узнаем, как интегрировать тестирование с Mockito и PowerMock.
Зависимости PowerMock
Нам нужны следующие зависимости PowerMock для насмешливых статических методов в Mockito.
powermock-api-mockito 2 : Это основная зависимость PowerMock, используемая для расширения платформы насмешек Mockito 2. Если вы используете версии Mockito 1.x, используйте powermock-api-mockito модуль.
powermock-модуль-junit4 : Для запуска тестов JUnit 4 с использованием PowerMock.
powermock-модуль-testng : Для запуска тестовых случаев TestNG и поддержки PowerMock.
Ниже приведен окончательный pom.xml из вашего проекта.
Обратите внимание, что я использую 2.0.0-бета.5 версию PowerMock. Эта версия поддерживает Java 10, однако она все еще находится в бета-версии, поэтому в сложных случаях могут возникнуть некоторые проблемы.
Когда я попытался использовать текущую стабильную версию 1.7.x , я получил следующие ошибки.
java.lang.NoSuchMethodError: org.mockito.internal.handler.MockHandlerFactory.createMockHandler(Lorg/mockito/mock/MockCreationSettings;)Lorg/mockito/internal/InternalMockHandler;
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMethodInvocationControl(DefaultMockCreator.java:114)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.createMock(DefaultMockCreator.java:69)
at org.powermock.api.mockito.internal.mockcreation.DefaultMockCreator.mock(DefaultMockCreator.java:46)
at org.powermock.api.mockito.PowerMockito.mockStatic(PowerMockito.java:73)
Для тестирования тестовых случаев нам не нужно использовать @RunWith аннотацию. Нам нужны тестовые классы для расширения PowerMockTestCase , чтобы PowerMockObjectFactory использовался для создания экземпляра тестового класса.
PowerMock предоставляет расширенные функции для Mockito, одной из которых является возможность тестирования статических методов. Он легко интегрируется с JUnit4 и TestNG. Однако для JUnit 5 не существует краткосрочного плана поддержки.