2012-06-08 3 views
5

Właśnie napisałem prosty przykładowy kod, aby upewnić się, że zainstalowałem poprawnie EclEmma. Nie dostaję 100% pokrycia i nie rozumiem dlaczego. Podświetlenie oznacza, że ​​ma to związek z nazwą klasy. Oto mój kod z odpowiednich testów JUnit, sposób EclEmma podświetlone go:Czy w pełni objęty kod ma wskaźnik zasięgu EclEmma mniejszy niż 100%?

Arithmetic class

Tests for Arithmetic class

Wyniki pokrycia pokazują, że trzy instrukcje w Arithmetic nie trafiony, choć obie rzeczywiste metody wydają być całkowicie pokryte:

Coverage information

Czytałem the EclEmma documentation about basic block coverage, ale jestem wciąż zdezorientowany. Nie jestem pewien, które podstawowe bloki zostały pominięte. Na początku myślałem, że EclEmma może po prostu ignorować bajt kodu dla klas, ale wydaje się, że ArithmeticTest jest w porządku.

Mam dwa ściśle powiązane pytania:

  1. Czy to wskazywać na problem z okazji I zainstalowane/skonfigurowane EclEmma?
  2. Czy to normalne/akceptowalne, że w pełni objęty kod ma wysoki, ale niezupełnie 100% wskaźnik zasięgu EMMA, a jeśli tak, jak to działa?

Odpowiedz

9

Kod implikuje konstruktora domyślnego, które nie mogą być prawidłowo oznaczony przez Emmę, bo nie ma bloku tekstu.

Ponieważ nie jest prawidłowo oznaczony w bloku tekstu, Emma nie może powiązać rejestrowania pokrycia z plikiem tekstowym i wygląda na to, że jakiś kod nie jest objęty; ponieważ uruchomiony został kod bajtowy, ale rejestrowanie linii nie mogło zostać zarejestrowane. Później, gdy element raportowania odczytuje rejestrowanie linii, nie może znaleźć numerów linii dla domyślnego konstruktora i podświetla błąd w jedynym miejscu, w którym ma sens, linii deklaracji klasy.

Domyślny konstruktor wygląda

public Arithmetic() { 
    super(); 
} 

Gdzie super jest implikowana pierwsza instrukcja, która wybuduje Object. Chociaż możesz pominąć jego obecność, kompilator doda go do Ciebie. Tutaj dostajesz "3 linie" zamiast jednego.

+0

W rzeczywistości ma "blok tekstu", jest po prostu pusty. W bajtode, domyślny konstruktor jest tam, w linii zaznaczonej na czerwono przez EclEmma. Aby to zakryć i mieć zielony kolor, test musi wywołać konstruktora: 'new arithmetic()'. Oczywiście właściwym rozwiązaniem byłoby zadeklarowanie domyślnego konstruktora 'private' w klasie. –

2

IIRC, należy utworzyć instancję klasy w celu wykonania podanego języka konstruktora.

4

myślę, że będzie to albo trzeba przetestować konkretyzacji Arithmetic jak dobrze, albo zadeklarować konstruktor private zabronić instancji

+1

Ah, testowanie konstruktora to robi. EclEmma nie jest szczęśliwsza z prywatnym konstruktorem, ale wydaje mi się, że pamiętam gdzieś tego obejście. – Pops

Powiązane problemy