2012-06-08 4 views
5

Ich habe gerade einen einfachen Beispielcode geschrieben, um sicherzustellen, dass EclEmma korrekt installiert wurde. Ich bekomme keine 100% ige Abdeckung, und ich verstehe nicht warum. Die Hervorhebung bedeutet, dass es mit dem Klassennamen zu tun hat. Hier ist mein Code, mit entsprechenden JUnit-Tests, die Art und Weise EclEmma es hervorgehoben:Kann der vollständig abgedeckte Code eine EclEmma-Abdeckung von weniger als 100% haben?

Arithmetic class

Tests for Arithmetic class

Die Berichterstattung Ergebnisse zeigen, dass drei Befehle in Arithmetic nicht getroffen zu, obwohl beide eigentlichen Methoden scheinen vollständig gedeckt werden:

Coverage information

ich the EclEmma documentation about basic block coverage gelesen habe, aber ich bin immer noch verwirrt. Ich bin mir nicht sicher, welche Grundblöcke verpasst werden. Zuerst dachte ich, dass EclEmma den Bytecode für Klassen einfach ignorieren würde, aber ArithmeticTest scheint in Ordnung zu sein.

Ich habe zwei eng verwandte Fragen:

  1. dies ein Problem mit der Art und Weise zeigen Ist ich EclEmma installiert/konfiguriert?
  2. Ist es für einen vollständig abgedeckten Code normal/akzeptabel, eine hohe, aber nicht ganz 100% ige EMMA-Abdeckung zu erhalten, und wenn ja, wie funktioniert das?

Antwort

9

Ihr Code einen Standardkonstruktor impliziert, die nicht ordnungsgemäß von Emma markiert werden kann, weil sie hat keinen Textblock.

Da es im Textblock nicht richtig markiert ist, kann Emma die Coverage-Protokollierung nicht mit der Textdatei verknüpfen, und es sieht so aus, als ob ein Code nicht abgedeckt ist. weil Sie einen Bytecode ausgeführt haben, aber die Zeilenprotokollierung konnte nicht registriert werden. Später, wenn das Berichtselement die Zeilenprotokollierung ausliest, kann es die Zeilennummern für den Standardkonstruktor nicht finden, und es markiert den Fehler an der einzigen Stelle, die sinnvoll ist, der Klassendeklarationszeile.

Der Defaultkonstruktor sieht aus wie

public Arithmetic() { 
    super(); 
} 

Wo die Super die implizite erste Befehl, die Object konstruieren wird. Während Sie seine Anwesenheit weglassen können, wird der Compiler es für Sie hinzufügen. Dort bekommt man "3 Zeilen" statt einer.

+0

Eigentlich hat es einen "Textblock", es ist nur leer. In Bytecode ist der Standardkonstruktor an der von EclEmma rot markierten Zeile vorhanden. Um es abzudecken und es grün erscheinen zu lassen, muss ein Test nur den Konstruktor aufrufen: 'new Arithmetic()'. Natürlich wäre es richtig, einen 'privaten' Standardkonstruktor in der Klasse zu deklarieren. –

2

IIRC, Sie müssen eine Instanz der Klasse instanziieren, um den von der Sprache bereitgestellten Konstruktor auszuführen.

4

Ich glaube, Sie müssen entweder das Instanziierung Arithmetic auch testen, oder erklären den Konstruktor private Instanziierung nicht zulassen

+1

Ah, Testen des Konstruktors tut es. EclEmma ist mit einem privaten Konstruktor nicht glücklicher, aber ich denke, ich erinnere mich, dass ich irgendwo einen Workaround gesehen habe. – Pops

Verwandte Themen