Как сказано в другом ответе StackOverflow MariuszS о Mocking статических методах с Mockito :
Использование PowerMockito поверх Mockito.
[...]
Дополнительная информация:
PowerMockito добавляет дополнительные функции и позволяет имитировать частные методы, статические методы и т. Д.
При этом вам, возможно, следует смоделировать экземпляр Repository
:
// In your test method
PowerMockito.mockStatic(Repository.class);
Не забудьте добавить аннотацию к вашему тестовому классу:
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class) // Since you are using SpringBoot
@PrepareForTest(Repository.class)
@PowerMockIgnore({"javax.management.*", "javax.net.ssl.*", "javax.security.*"}) // Avoid certain classloading related issues, not mandatory
В моем примере Mockito.when()
заменяется на PowerMockito.doReturn(...).when(...)
. Это может выглядеть следующим образом:
@Test
public void testUpdateOut() {
Entity entity1 = new Entity ();
entity1.setType(2);
PowerMockito.mockStatic(Repository.class);
PowerMockito.doReturn(entity1).when(
Repository.class,
"findByTypeAndParams", // The name of the method
Mockito.anyInt(), // The arguments
Mockito.anyString(),
Mockito.anyString(),
Mockito.anyString()
);
// Your test
notificationServiceMock.updateNotification("AX", entity1);
// And at the end of the test:
PowerMockito.verifyStatic(); // It will verify that all statics were called one time
}
Обратите внимание, что я заменяю ваши any(Integer.class)
и any(String.class)
соответственно на anyInt()
и anyString()
.
Надеюсь, это поможет!