2010-08-05 18 views
133

Kiedy testowanie jednostkowe z JUnit, istnieją dwie podobne metody, setUp() i setUpBeforeClass(). Jaka jest różnica między tymi metodami? Jaka jest różnica między tearDown() i tearDownAfterClass()?Różnice między setUp() i setUpBeforeClass()

Oto podpisy:

@BeforeClass 
public static void setUpBeforeClass() throws Exception { 
} 

@AfterClass 
public static void tearDownAfterClass() throws Exception { 
} 

@Before 
public void setUp() throws Exception { 
} 

@After 
public void tearDown() throws Exception { 
} 

Odpowiedz

176

The @BeforeClass i @AfterClass adnotacjami metod będzie uruchamiany tylko raz podczas testu - na samym początku i na końcu badania jako całości, przed uruchomieniem czegokolwiek innego. W rzeczywistości są one uruchamiane przed skonstruowaniem klasy testowej, dlatego muszą zostać zadeklarowane jako static.

Metodę @Before i @After należy uruchamiać przed każdym przypadkiem testowym i po nim, więc najprawdopodobniej zostanie uruchomione wiele razy podczas testu.

Więc załóżmy, że miał trzy testy w swojej klasie, kolejność wywołań metod byłoby:

setUpBeforeClass() 

    (Test class first instance constructed and the following methods called on it) 
    setUp() 
    test1() 
    tearDown() 

    (Test class second instance constructed and the following methods called on it) 
    setUp() 
    test2() 
    tearDown() 

    (Test class third instance constructed and the following methods called on it) 
    setUp() 
    test3() 
    tearDown() 

tearDownAfterClass() 
4

Od the Javadoc:

Czasami kilka testów muszą dzielić kosztowne obliczeniowo konfigurację (np zalogowaniu do bazy danych). Chociaż może to zagrozić niezależności testów, czasami jest to niezbędna optymalizacja. Dodawanie adnotacji do metody no-arg public static void z @BeforeClass powoduje, że jest ona uruchamiana raz przed każdą z metod testowych w klasie. Metody nadklas będą przeprowadzane przed tymi, które są obecnie używane.

+0

Różnica polega na tym, że setUpBeforeClass jest uruchamiany przed każdym z testów i jest uruchamiany jeden raz; setUp jest uruchamiany raz przed każdym testem (i zwykle służy do resetowania stanu testowania do znanej dobrej wartości między testami). – Syntax

6

setUpBeforeClass prowadzony jest przed każdym wykonaniem metody tuż po konstruktora (uruchamiane tylko raz)

Konfiguracja jest prowadzony przed każdym wykonaniem metody

łza jest uruchamiany po każdym wykonaniu metody

tearDownAfterClass jest prowadzony afte r wszystkie inne metody wykonania, to ostatnia metoda do wykonania. (uruchom tylko raz dekonstruktor)

15

Wyobraź sobie "BeforeClass" jako inicjator statyczny dla twojego przypadku testowego - używaj go do inicjowania danych statycznych - rzeczy, które nie zmieniają się w twoich testowych przypadkach. Na pewno chcesz zachować ostrożność w odniesieniu do zasobów statycznych, które nie są bezpieczne dla wątków.

Wreszcie, użyj metody z adnotacjami "AfterClass", aby wyczyścić wszelkie ustawienia wykonane w metodzie "BeforeClass" z adnotacjami (chyba że ich samozniszczenie jest wystarczająco dobre).

"Przed" & "Po" służą do specyficznej inicjalizacji testu urządzenia. Zwykle używam tych metod, aby zainicjować/ponownie zainicjować mocks moich zależności. Oczywiście ta inicjalizacja nie jest specyficzna dla testu jednostkowego, ale ogólna dla wszystkich testów jednostkowych.

+0

BTW, jeśli zaczynasz pisać test jednostkowy, poleciłbym tę pulę z mojego bloga. Ma również wskazówki do innych świetnych materiałów na temat testów jednostkowych: http://madhurtanwani.blogspot.com/search/label/mock – madhurtanwani

Powiązane problemy