Unten ist eine Methode, die ich JUnit-Test für zu schreiben versucht bin:Testen, ob ein Logback-Log-Statement mit Junit aufgerufen wurde?
Methode Ich möchte Test:
//logger declared outside of method in Class
private static Logger LOGGER = LoggerFactory.getLogger(PersonService.class);
public void showOutputOfIdentifications(int age) {
if(age>25){
LOGGER.info("Over 25");
}else{
LOGGER.info("25 or Under");
}
}
Wie kann ich testen, um zu überprüfen, dass die richtige Logback
Log-Anweisung aufgerufen wurde ?
In meinen Tests habe ich versucht, die logger
zu verspotten und zu überprüfen, dass es hieß, aber das hat nicht funktioniert?
Current Test Versuch:
@Test
public void testShowOutputOfIdentifications() throws ParseException{
int age = 10;
Logger LOGGER_mock = mock(Logger.class);
//call method under test
showOutputOfIdentifications(age);
verify(LOGGER_mock).info("25 or under");
}
Aktuelle Versagen Testausgang:
Wanted but not invoked:
logger.info(
"25 or under "
);
Actually, there were zero interactions with this mock.
Die zu testende Klasse hat wahrscheinlich einen statischen Logger LOGGER, der verwendet wird. Sie müssten Ihren Spott als diesen Logger injizieren. Wenn Sie einen anderen Logger erstellen, wird er nicht aufgerufen. – Fildor
Danke, bitte zeigen Sie Beispiel, ich habe die ursprüngliche Methode bearbeitet, um meine statische Logger zu zeigen # – java123999
Der Punkt ist: Sie müssen ** Kontrolle ** die Objekte, die Ihr "Code unter Test" verwendet. Wenn Sie ein Factory-Objekt für Sie erstellen und dieses Objekt dann innerhalb Ihrer Testklasse zugewiesen wird; Du hast keine Kontrolle. – GhostCat