2012-10-31 12 views
18

Czy w JUnit można dodać krótki opis testu dla przyszłego czytnika (np. Co jest testowane, jakieś krótkie wyjaśnienie, oczekiwany wynik, ...)? Mam na myśli coś podobnego w ScalaTest, gdzie mogę napisać:JUnit opis testu

test("Testing if true holds") { 
    assert(true) 
} 

Idealne podejście byłoby przy użyciu niektórych adnotacji, np

@Test 
@TestDescription("Testing if true holds") 
public void testTrue() { 
    assert(true); 
} 

Dlatego, jeśli biegnę takie adnotacją testy przy użyciu Maven (lub trochę podobnego narzędzia), mogę mieć podobny wynik do jednego mam w SBT podczas korzystania ScalaTest:

- Testing if entity gets saved correctly 
- Testing if saving fails when field Name is not specified 
- ... 

Currently mogę albo używaj strasznie długich nazw metod lub napisz komentarze javadoc, które są nieobecne w wynikach kompilacji.

Dziękuję.

+0

Typowym sposobem jest po prostu mieć opis w nazwą testu, np 'public void testIfTrueHoldsForNegativeValues ​​()'. Nie widzę potrzeby stosowania specjalnej adnotacji. – Keppil

+1

Nie widzę niczego złego w długich nazwach, ponieważ są one dość powszechne. Możesz napisać je elegancko, np. 'entityIsSavedCorrectly',' saveFailsWhenNameMissing', itp. Pamiętaj, aby nie dodawać prefiksu 'test', ponieważ jest zbędny (szczególnie z adnotacją' @ Test'). ScalaTest podaje tylko ciąg znaków, w którym nazwa metody JUnit byłaby, więc wszystko, co "tracisz", to spacje. Jeśli musisz mieć opisy, zawsze możesz przykleić je do poszczególnych stwierdzeń. –

Odpowiedz

13

W JUnit 5, istnieje @DisplayName adnotacja:

@DisplayName służy do deklarowania niestandardowej nazwy wyświetlanej dla anotowanej klasy testowej lub metody testowej. Nazwy wyświetlaczy są zwykle używane do raportowania testów w IDE i narzędziach do kompilacji i mogą zawierać spacje, znaków specjalnych, a nawet emoji.

przykład:

@Test 
@DisplayName("Test if true holds") 
public void checkTrue() { 
    assertEquals(true, true); 
} 
+0

Istnieje wtyczka do Androida, jeśli chcesz używać JUnit5: https://github.com/mannodermaus/android-junit5 – Christopher

12

Nie dokładnie to, czego szukasz, ale możesz podać opis na dowolnej metodzie assert.

Coś jak:

@Test 
public void testTrue() { 
    assertTrue("Testing if true holds", true); 
} 
0

szczegółowe rozwiązanie byłoby: Można dodać Logger do testu, aby zalogować się na wyniki do pliku. See log4j, na przykład. Następnie możesz odczytać wyniki w pliku, a także wydrukować pomyślne oświadczenia, co nie jest możliwe.

proste rozwiązanie: Można dodać opis JDoc do każdej metody badania, to będzie opisane, jeśli wygenerować Javadoc.

Także każde oświadczenie assert może dostarczyć wiadomość, która zostanie wydrukowana, gdy tylko ulegnie awarii assert.

/** 
* test the List#size() increasement after adding an Object to a List. 
*/ 
public void testAdd(){ 
    List<Object> list = new LinkedList<>(); 
    list.add(new Object()); 
    assertEquals("size should be 1, because of adding an Object", 1, list.size()); 
} 

NIE używaj System.out.println("your message"); bo nie wiem jak testy zostaną wykonane i jeśli środowisko nie zawiera konsolę, nie będą wyświetlane wiadomości.

2

można nazwać metodę testową po teście:

public void testThatOnePlusOneEqualsTwo() { 
    assertEquals(2, 1 + 1); 
} 

ten pojawi się w Eclipse, murowany, i większości innych biegaczy.

10

TestNG robi to w ten sposób, co dla mnie jest neatest rozwiązanie:

@Test(description="My funky test") 
public void testFunk() { 
    ... 
} 

Zobacz http://testng.org/javadocs/org/testng/annotations/Test.html aby uzyskać więcej informacji.

+1

Przykro mi to zaznaczyć. Pytanie dotyczy Junit, a nie TestNG. Wszyscy wiemy, że TestNG obsługuje opis. – nabsATX

+3

To istotne informacje. W przeciwieństwie do tego, co zostało powiedziane, nie wszyscy znają TestNG i nie każdy wie, że w przeciwieństwie do JUnit, obsługuje opisy. Myślę, że warto to zasugerować, mimo że pytanie OP dotyczy JUnit. Czytelnicy mogą nie zostać naprawieni w strukturze, której używają. –

+0

Przynajmniej dla mnie ten komentarz był pomocny i nie znałem TestNG, właśnie dlatego, że niedawno zacząłem od Java pochodzącej z TypeScript, gdzie użyłem Mocha - chyba nie byłbyś programistą JavaScript, którego byś nie wiedział o Mocha , dobrze? – Alfi

4

Wolę przestrzegać standardowego formatu podczas testowania w JUnit.Nazwa testu byłoby

test[method name]_[condition]_[outcome] 

na przykład:

@Test 
public void testCreateObject_nullField_errorMessage(){} 

@Test 
public void testCreateObject_validObject_objectCreated(){} 

myślę, że to podejście jest przydatne, gdy robi TDD, ponieważ można po prostu zacząć pisać wszystkie nazwy testu, więc wiesz co trzeba przetestować/rozwinąć.

Nadal chciałbym powitać funkcjonalność opisu testu z JUnit.

I to jest na pewno lepiej niż w innych testach widziałem w przeszłości jak:

@Test public void testCreateObject1(){} 
@Test public void testCreateObject2(){} 
@Test public void testCreateObject3(){} 

lub

@Test public void testCreateObjectWithNullFirstNameAndSecondNameTooLong(){} 
Powiązane problemy