2012-12-13 24 views
5

Mam klasę testową Junit z wieloma metodami @Test, które muszę uruchomić po kolei. Jeśli istnieje wyjątek zgłoszony w metodzie, chciałbym zatrzymać cały test i błąd, ale wszystkie pozostałe metody testowe są uruchomione.Klasa testowa Junit z wieloma metodami @Test

public class{ 

@Test{ 
//Test1 method`enter code here` 
} 

@Test{ 
//Test2 method 
} 

@Test{ 
//Test3 method 
} 

} 

Jeśli metoda Test1 zawiedzie wtedy nie działają inne testy

Uwaga: Wszystkie są niezależne testy

Odpowiedz

9

testy jednostkowe powinny być zaprojektowane tak, aby działać niezależnie od siebie. Kolejność wykonania nie może być zagwarantowana. Powinieneś przeprojektować swoją klasę testową, aby kolejność nie była ważna.

Bez dalszych informacji trudno jest Ci doradzić. Ale może pomóc mieć metodę @before, która sprawdza pewne warunki wstępne przed uruchomieniem każdego testu. Jeśli zawarłeś wywołanie metody Assume.assumeTrue(...), test może zostać pominięty, jeśli warunek się nie powiedzie?

2

Jeśli zachodzi potrzeba zachowania i niepowodzenia testu, aby nie zawieść całego zestawu, należy umieścić wszystkie takie testy w jednym i przetestować na podstawie założenia.

8

Zgodnie z opisem here, JUnit 4.11 obsługuje zamówione wykonanie z Adnotacją @FixMethodOrder, ale pozostałe mają rację, wszystkie testy powinny być niezależne od siebie.

Po zakończeniu testu można ustawić globalną flagę sukcesu. Ta flaga będzie testowana na początku każdego testu. Jeśli flaga nie zostanie ustawiona przed końcem jednego testu (ponieważ nie powiedzie się przed zakończeniem) wszystkie inne testy również zawiodą. Przykład:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class ConsecutiveFail{ 
    private boolean success = true; 

    @Test 
    public void test1{ 
    //fist two statements in all tests 
    assertTrue("other test failed first", success); 
    success = false; 
    //do your test 
    //... 

    //last statement 
    success = true; 
    } 

    @Test 
    public void test2{ 
    //fist two statements in all tests 
    assertTrue("other test failed first", success); 
    success = false; 
    //do your test 
    //... 

    //last statement 
    success = true; 
    } 
} 
1

Oto przykład dla TestNG jak określić testową Running Order:

@Test(priority = 1) 
public void test1(){} 

@Test(priority = 2) 
public void test2(){} 

@Test(priority = 3) 
public void test3(){} 
Powiązane problemy