Как использовать 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);
}
}


Подробнее здесь: https://stackoverflow.com/questions/714 ... ic-methods
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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