2012-03-28 17 views
30

W moim projekcie muszę wykonać konfigurację repozytorium przed wszystkimi testami. Odbywa się to za pomocą trudnych reguł statycznych. Jednak nie mam pojęcia, jak zrobić porządek po wszystkich testach. Nie chcę utrzymywać magicznej liczby statycznej odnoszącej się do liczby wszystkich metod testowania, które powinienem utrzymywać przez cały czas.Oczyszczanie po wszystkich testach junitowych

Najbardziej docenionym sposobem jest dodanie niektórych detektorów, które będą wywoływane po wszystkich testach. Czy jest już jakiś interfejs do niego w JUnit4?


edit: to nie ma nic wspólnego z @BeforeClass i @AfterClass, bo muszę wiedzieć, czy metoda opatrzone @AfterClass jest wywoływana po raz ostatni.

+0

czysty ** ** TestNG rozwiązanie można znaleźć tutaj: http://stackoverflow.com/a/26381858/1857897 – dedek

Odpowiedz

30

Używam JUnit 4.9. Czy to pomoże ?:

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({First.class,Second.class,Third.class}) 
public class RunTestSuite extends TestCase { 
    @BeforeClass 
    public static void doYourOneTimeSetup() { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  
} 

Edytuj: Jestem całkiem pozytywny (chyba że źle zadaję ci pytanie), że moje rozwiązanie jest tym, czego szukasz. tj. jedna metoda odrzucenia po wykonaniu wszystkich testów. Nie wymaga słuchacza, JUnit ma to udogodnienie. Dzięki.

+1

Jestem całkiem pewien, że to będzie osiągnąć swój cel, chyba że rozumieją swojej pytanie. – HellishHeat

+6

Musiałbym wyliczyć wszystkie klasy testowe (które są nawet teraz kilka, a liczba szybko się zwiększy), więc jest niestety nie do przyjęcia –

+1

Przykro mi, człowieku, po prostu nie wiem, co próbujesz zrobić. Nie mam pojęcia, dlaczego musisz coś wyliczać. Sugeruję, aby umieścić więcej szczegółów w swoim pytaniu, ponieważ w jego obecnym brzmieniu oznacza to, że po zakończeniu wszystkich testów należy wykonać pewne statyczne zachowanie po zakończeniu testu. To wszystko, co określiłeś. Jeśli tak było, to moje rozwiązanie to robi. Proszę zauważyć, że nie uruchamiam AfterClass po każdym z twoich testów. Używam adnotacji AfterClass w AllTests. SO będzie wywoływany po wszystkich testach. Może po prostu tego nie rozumiem :) – HellishHeat

1

Zawsze możesz napisać swój własny TestRunner. Jednak zanim to zrobisz, musisz ocenić potrzebę tego samego. Lepiej jest używać @BeforeClass i @AfterClass. Innym przykładem, na który mogę wskazać, jest moda, w której hibernacja pozwala użytkownikom na testowanie jednostek za pomocą "import.sql".

34

polecam użyć org.junit.runner.notification.RunListener, przykład:

public class TestListener extends RunListener { 
    @Override 
    public void testRunStarted(Description description) throws Exception { 
    // Called before any tests have been run. 
    } 
    @Override 
    public void testRunFinished(Result result) throws Exception { 
    // Called when all tests have finished 
    } 
} 

Czytaj więcej bezpośrednio w JUnit java doc. można użyć, że nawet z SureFire Maven za (testy jednostkowe) wtyczki lub w razie awarii wtyczki (testy integracyjne), dodając następujący kod do konfiguracji wtyczki:

<properties> 
    <property> 
    <name>listener</name> 
    <value>com.innovatrics.afismq.it.TestListener</value> 
    </property> 
</properties> 
+1

Podoba mi się to rozwiązanie o wiele lepiej. Nie musisz wymieniać wszystkich klas. – committedandroider

1

ma potrzeby korzystania z pakietu, wystarczy dodać @BeforeClass i @AfterClass jako statycznego

public class Tests { 

    @BeforeClass 
    public static void doYourOneTimeSetup() 
    { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  

    @Test 
    public void testYourTestcase() 
    { 
     ... 
    } 
} 
+1

To nie działa, jeśli masz więcej niż jedną klasę testową. –

+0

tak jest w zakresie klasy – serup

Powiązane problemy