Es ist üblich Logging-Funktionalität im CodeSollten wir die Testprotokollierung zusammenführen?
public class A {
private static final Log LOG = LogFactory.getLog(A.class);
und Nutzung
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw e;
}
aber ich habe nie gesehen, auch einzelne Einheit Test für einen solchen Code zu sehen.
Natürlich teste ich Wurf Ausnahme und Ausnahme Typ, aber sollte ich Test für die Überprüfung der Protokollierung Informationen schreiben? Ich neige dazu, zu denken, dass Logging ein weiterer Teil des Systemverhaltens ist, also ist es logisch, es in den Tests abzudecken.
Angenommen, dass ich es abdecken sollte, bedeutet, dass ich meinen ursprünglichen Code ändern sollte, um Mock-Protokoll einzufügen und zu überprüfen, dass die "Fehler" -Methode mit der erwarteten Nachricht aufgerufen wurde. Aber was tun, wenn meine ursprüngliche Klasse Dienst ist und im Frühjahr instanziiert wird, sollte ich etwas Logger sowie andere Abhängigkeiten injizieren?
ist es der gleiche Ansatz, den ich in meiner Frage erwähnt habe. Aber für mich ist es immer noch unklar, was man bei Frühlingsdiensten tun sollte, da normalerweise LOG für jede Klasse erstellt wurde, also ist es klassenspezifisch und ich kann es nicht als Singleton machen. –
Wenn Sie keine Kontrolle über den Code haben, der das Log-Objekt instanziiert, ist es schwierig, das Verhalten zu testen, da Sie kein Scheinprotokoll verwenden können. Sie könnten es mit dem echten Log-Objekt protokollieren lassen und dann prüfen, ob eine Nachricht protokolliert wurde. Das ist jedoch schwer zu automatisieren! –
Nein, ich stimme Ihnen zu, dass der Protokollierungscode getestet werden sollte. Dann heißt das, dass wir LOG einrichten sollten, so dass es möglich ist, Scheinanmeldungs-Tests zu bestehen, aber was man im Falle von Frühlingsdiensten tun sollte. Ich denke über 2 mögliche Wege nach: 1) habe einen Setter, aber rufe nur aus Tests auf (könnte schwierig sein, solche Sichtbarkeit einzuschränken, da der Frühling eine automatische Injektion machen könnte), 2) Logger durch Feder injizieren, aber in diesem Fall ist es schwer instanziieren Sie den richtigen Logger. –