Frage

Ich bin mit dem Maven (2) Cobertura Plug-in Berichte über Code Coverage zu erstellen, und ich habe folgenden Stummel I in einem Verfahren bin mit:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

Ich weiß, dass ich die Ausnahme protokollieren, usw., aber das ist nicht der Punkt jetzt ... Cobertura anzuerkennen weigert sich, dass die Leitung nach dem Stack-Trace wird gedruckt bedeckt ist. Das heißt, die Linie mit dem ‚}‘ vor der System.err.println Anweisung nicht benotet wird bedeckt gezeigt. Zuvor war die Endung geschweifte Klammer des Verfahrens nicht abgedeckt wird gezeigt, daher die System.err Aussage. Jede Idee, wie ich kann cobertura das Maven Plugin überzeugen, dass, da die System.err.println Anweisung abgedeckt ist, dass die Verstrebung enden muss abgedeckt wurden?

Ach ja, und ich einen Mock-Sicherheits-Manager verwenden, um die Sicherheitsausnahme zu werfen, denn das ist der einfachste Weg, ich den Test macht weiterhin die Ausführung nach dem System.exit Aufruf gefunden zu haben.

War es hilfreich?

Lösung

Ich habe nicht Cobertura in einer Zeit lang (2005?), Und sah dieses Verhalten damals verwendet. Ein ähnliches Problem besteht mit NCover für C # und geschweiften Klammern folgende catch / finally Blöcke.

Mein Vorschlag würde hinzufügen zu diesen Bericht Cobertura bug Detaillierung ein ähnliches Problem . Außerdem folgte @ tvanfosson Rat und erkennen nicht Bedeckung auf einer geschweiften Klammer mit, die eigentlich nichts in der JVM werden, ist etwas, das man als ‚Rauschen‘ ignorieren kann.

Andere Tipps

Ich würde die Berichterstattung Bericht sehen. Doppel meine Tests überprüfen. Beachten Sie, dass der Code tatsächlich abgedeckt ist immer und sich keine Sorgen über 100% schlagen. Codeabdeckung wird am besten verwendet, um Bereiche zu finden, die Sie mit Ihren Tests vernachlässigt haben zu treffen, aber als Ziel auf immer 100% Deckung nur Fokussierung schlechte Gewohnheit, die Sie das Überspringen Tests führen kann, die geschrieben werden müssen, nur weil Ihr Werkzeug zeigt 100%. Verwenden Sie das Tool für das, was es tun kann, fallen jedoch nicht in die Falle das Werkzeug zu lassen, zu definieren, was Sie tun.

In der Java-Klassendatei-Format wird jede Methode mit einer Tabelle Mapping-Code-Offsets kommentierten Zahlen auszukleiden. In diesem Fall wird die schließende Klammer jedes Bytecode nicht produzieren, daher ist es nicht abgedeckt. Dies ist ein Problem der unvollkommenen Übereinstimmung zwischen Quelle und Bytecode. Es sollte durch das Coverage Tool behandelt werden, diese Zeile als nicht-Code zu erkennen.

Ich weiß, dass Emma ähnliche Probleme hat. Clover Tarife viel besser, ist aber kommerzielle (nicht sicher, ob es auch diesen Fall behandeln würde) . Wenn Sie IDEA verwenden, sollten Sie ihr versuchen neue Abdeckung Implementierung -. es ist sehr gut und in der aktiven Entwicklung

Ich weiß, dass dies eine alte Frage ist und dass Cobertura hat dies bereits festgelegt, aber die Vollständigkeit halber die fehlende Berichterstattung über das „}“ durch den internen automatisch verursacht wurde „endlich“ Block.

Sehen Sie den Code wie folgt aus:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

Zum Glück ist dies nicht geschieht länger für einige Versionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top