2016-07-29 5 views
3

Es stellt sich heraus, dass JUnit @BeforeClass und @AfterClass statisch sein möchte und dies nicht gut mit JerseyTest configure Methode Override. Gibt es eine bekannte Möglichkeit, die Jersey-Anwendung zu konfigurieren und dennoch auf die Dienstprogrammmethoden von JUnit zuzugreifen?Wie @BeforeClass und @AfterClass innerhalb einer JerseyTest-Suite verwenden

public class MyControllerTest extends JerseyTest { 
    @BeforeClass 
    public static void setup() throws Exception { 
    target("myRoute").request().post(Entity.json("{}")); 
    } 
    @Override 
    protected Application configure() { 
     return new AppConfiguration(); 
    } 
} 

Daher beforeClass muss statisch sein, target kann nicht wegen seiner instanz Verfahren Natur bezeichnet werden. Beim Versuch, stattdessen den Konstruktor zu verwenden, stellt sich heraus, dass configure nach dem constructor ausgeführt wird, und dies verhindert, dass die Setup-Anforderung ausgeführt wird und wird daher natürlich fehlschlagen.

Jeder Ratschlag ist mehr als willkommen, danke!

+0

Nun, warum sollten Sie die 'setup()' Methode statisch sein? Kannst du es nicht einfach zum Mitglied machen und '@ Before' stattdessen benutzen? – hfhc2

+0

Didi probierst du '@ Before' anstatt' @ BeforeClass'? – Dimitri

+0

es ist eine schwere und möglicherweise zeitraubende Operation, die ich nicht bei jedem einzelnen Test ausführen möchte. @Dimitri – Ivo

Antwort

-2

@Before erfordert nicht die statischen Modifikator und wird vor jedem Test-Verfahren ausgeführt werden.

+0

es soll eine schwere und möglicherweise zeitaufwendige Operation sein, die ich nicht bei jedem einzelnen Test ausführen möchte. – Ivo

1

Was wir in einigen Fällen getan haben, um schwere Setups in solchen Situationen zu vermeiden, ist die Verwendung eines booleschen Flags, um dieses Setup bedingt auszuführen.

public class MyControllerTest extends JerseyTest { 

    private static myRouteSetupDone = false; 

    @Before 
    public void setup() throws Exception { 
    if (!myRouteSetupDone) { 
     target("myRoute").request().post(Entity.json("{}")); 
     myRouteSetupDone = true; 
    } 
    } 
    @Override 
    protected Application configure() { 
     return new AppConfiguration(); 
    } 
} 
Verwandte Themen