2013-09-06 12 views
6

Beim Schreiben von Code, der mit externen Ressourcen interagiert (z. B. mit einem Webdienst oder einem anderen Netzwerkbetrieb), strukturiere ich die Klassen oft so, dass sie auch mit einer Datei "stubbed" werden können eine andere Eingabemethode. Dann benutze ich die stubbed-Implementierung, um andere Teile des Systems zu testen, und dann einen oder zwei Tests, die speziell den Aufruf des Web-Service testen.Einige JUnit-Tests von der automatisierten Testsuite ausschließen

Das Problem ist, ich möchte nicht diese externen Dienste entweder von Jenkins aufrufen oder wenn ich alle Tests für mein Projekt (z. B. "Graptle Test") ausführen. Einige der Dienste haben Nebenwirkungen oder sind möglicherweise nicht für alle Entwickler zugänglich.

Im Moment kommentieren Sie die @Test-Annotation zu diesen speziellen Testmethoden einfach aus und kommentieren sie erneut, um sie zu aktivieren und zu deaktivieren. Aktivieren Sie es, führen Sie es manuell aus, um es zu überprüfen, und denken Sie daran, es erneut zu kommentieren.

// Uncomment to test external service manually 
//@Test 
public void testSomethingExternal() { 

Gibt es einen besseren Weg, dies zu tun?

EDIT: Für manuelle Komponententests verwende ich Eclipse und bin in der Lage, nur mit der rechten Maustaste auf die Testmethode und Ausführen als -> JUnit Test. Aber das funktioniert nicht ohne die (unkommentierte) Annotation.

+0

Es ist nicht klar, ob Sie ein automatisiertes "Profil" von Komponententests haben möchten, das Sie zwischen den beiden hin- und herwechseln können, oder einfach nur, um sie während der Entwicklung manuell zu wechseln. – chrylis

+0

@chrylis Was ich ursprünglich versuchte, war, einen individuellen Test durchzuführen. Die Idee, ein separates Profil für diese Arten von Tests zu erstellen, ist jedoch wahrscheinlich ein besserer Ansatz. Obwohl ich immer noch die Fähigkeit haben möchte, einige Tests getrennt durchzuführen (in Fällen, in denen es beispielsweise Nebenwirkungen gibt - die ich zu vermeiden versuche, aber manchmal unvermeidlich ist). –

Antwort

2

Soweit ich sehen kann, verwenden Sie Gradle und API für JUnit sagt, dass Annotation @Ignore deaktiviert Test. Ich werde hinzufügen, Gradle Task, die @Ignore für diese Tests hinzufügen wird.

3

Wenn Sie nur Tests für Funktionen deaktivieren möchten, die noch nicht geschrieben wurden, oder einige Tests vorübergehend manuell deaktivieren, können Sie @Ignore; Die Tests werden übersprungen, aber dennoch im Bericht notiert.

Wenn Sie etwas wie Spring Profiles möchten, wo Sie Regelwerke definieren können, für die Tests wann ausgeführt werden, sollten Sie Ihre Tests entweder in separate Testfälle aufteilen oder Filter verwenden.

+0

Interessant. Siehe oben meine Bearbeitung - vielleicht könnte ich einen Filter erstellen, der erkennt, wenn ich einen einzelnen Test in Eclipse ausführe und (un) diese Testmethode entsprechend filtert. (Hätte nicht gedacht, dass es wie Frühlingsprofile ist, aber ja, es ist ziemlich ähnlich.) –

6

Ich empfehle die Verwendung von Junit-Kategorien. Details finden Sie in diesem Blog: https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0.

Grundsätzlich können Sie einige Tests in einer speziellen Kategorie annotieren, und dann können Sie zwei Testsuiten einrichten: eine, die Tests dieser Kategorie ausführt und eine, die Tests in dieser Kategorie ignoriert (aber alles andere ausführt).

@Category(IntegrationTests.class) 
public class AccountIntegrationTest { 

    @Test 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

    @Test 
    public void thisTestWillTakeEvenLonger() { 
    .... 
    } 

}

Sie können sogar einzelne Tests mit Anmerkungen versehen“

public class AccountTest { 

    @Test 
    @Category(IntegrationTests.class) 
    public void thisTestWillTakeSomeTime() { 
    ... 
    } 

immer wenn ich sehe etwas manuell ein- oder ausgeschaltet zu werden Ic Ringe.

+0

Danke - das klingt nach einer guten Idee. Nicht sicher, wie dies mit Gradle oder Eclipse interagiert, muss das noch weiter überprüfen. –

+0

funktioniert gut in Eclipse. Sie machen immer noch den gleichen Run als -> Junit – dkatzel

Verwandte Themen