Как использовать MockedStatic для проверки статических методов?JAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать MockedStatic для проверки статических методов?

Сообщение Anonymous »

У меня есть следующие макеты для двух разных статических методов; UnitConversion.isCompatible() и Logging.error(), которые вызываются в моем методе службы.
Вот мой тестовый метод:
myService.demoMethod();

try (MockedStatic unitConversion= mockStatic(UnitConversion.class)) {
unitConversion.verify(never(), () -> UnitConversion.isCompatible(any()));
UnitConversion.isUnitsCompatible(any());
}

try (MockedStatic logging = mockStatic(Logging.class)) {
logging.verify(times(1), () -> Logging.error(any()));
Logging.error(any();
}

Первый метод никогда не вызывается, а второй вызывается один раз при отладке. Это нормально, но тест выдает ошибку «Разыскивается, но не вызывается» для второго метода. Я не уверен, следует ли мне вызывать статические методы в блоках try, поскольку я уже вызываю свой метод службы, который вызывает статические методы.
Итак, как я могу проверить вызовы статических методов с помощью MockedStatic (а не powermock и т. д.)? Должен ли я вызывать их в блоках try?
Обновление: Я использую следующий подход, но он все равно выдает ошибку "Хотелось, но не вызывается", даже если точка останова сработала один раз для статического метода, вызванного из метода службы.
// I also try to call the service method under the test here again
demoService.create(request);

try (MockedStatic mock = mockStatic(LoggingUtils.class)) {
// as the static method is void, no need to stub and not use "when()" in here

// I call the service method under the test
demoService.create(request);

// verify that the method is being invoked
mock.verify(times(1), () -> LoggingUtils.error(any(), any()));
}

Update-II:
demoService:
public CommandDTO create(final PurchaseRequest request) {
// code omitted

addLog();
return CommandDTO.builder().uuid(purchase.getUuid()).build();
}

private void addLog() {
LoggingUtils.error("error", null);
}

LoggingUtils:
public class LoggingUtils {

public static void error(String var1, Throwable var2) {
log.error(getString(var1), var2);
}
}

Вернуться в «JAVA»