Wie verwende ich die MockedStatic-Überprüfung für statische Methoden?Java

Java-Forum
Anonymous
 Wie verwende ich die MockedStatic-Überprüfung für statische Methoden?

Post by Anonymous »

Ich habe die folgenden Mocks für zwei verschiedene statische Methoden; UnitConversion.isCompatible() und Logging.error(), die in meiner Servicemethode aufgerufen werden.
Hier ist meine Testmethode:

Code: Select all

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();
}
Die erste Methode wird nie aufgerufen, während die zweite einmal beim Debuggen aufgerufen wird. Es ist in Ordnung, aber der Test gibt für die zweite Methode den Fehler „Gesucht, aber nicht aufgerufen“ aus. Ich bin mir nicht sicher, ob ich die statischen Methoden in Try-Blöcken aufrufen soll, da ich bereits meine Dienstmethode aufrufe, die die statischen Methoden aufruft.
Wie kann ich also die statischen Methodenaufrufe mit MockedStatic (nicht Powermock usw.) überprüfen? Sollte ich sie in Try-Blöcken aufrufen?
Update: Ich verwende den folgenden Ansatz, aber er gibt immer noch den Fehler „Gesucht, aber nicht aufgerufen“ aus, selbst wenn der Haltepunkt einmal für die von der Dienstmethode aufgerufene statische Methode erreicht wurde.

Code: Select all

// 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:

Code: Select all

public CommandDTO create(final PurchaseRequest request) {
// code omitted

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

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

Code: Select all

public class LoggingUtils {

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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post