2013-04-21 5 views
6

Ich wollte eine meiner POST-Methoden in meinem Controller testen, so dass ich etwas wie folgt geschrieben:Play-Rahmen - Test POST Controller-Methode

@Test 
    public void shouldSaveNewCollectionToDatabase(){ 
     String body = "{\"name\":\"collectionName\", \"owner\": {}}"; 
     JsonNode json = Json.parse(body); 
     FakeRequest request = new FakeRequest(POST, "/rest/collections/add").withJsonBody(json); 

     Result result = callAction(controllers.routes.ref.SetsAndCollections.postCollection(), request); 
     verify(questionSetCollectionDAO).save(any(QuestionSetCollection.class)); 
    } 

die Sache ist, dieser Test fehl, da Controller-Methode nicht aufgerufen wird überhaupt nicht meine questionSetCollectionDAO Methoden werden nicht aufgerufen.

I Veranstaltung setzte einig Druck an der Spitze des Verfahrens:

@BodyParser.Of(Json.class) 
@play.db.jpa.Transactional 
public static Result postCollection(){ 
    System.out.println("I am here"); 
... 

und ich keine Ausgabe auf der Konsole sehen.

Wenn das nicht die Art ist, wie ich Controller-Methoden mit gefälschten Anfragen aufrufen könnte, wie kann ich das tun?

Ich lese über fakeApplication aber ich gibt es eine andere Möglichkeit, einige einfache Tests von POST Controller-Methoden zu tun?

+1

Haben Sie das jemals herausgefunden oder finden Sie noch etwas? – Meredith

Antwort

0

Können Sie den http-Statuscode Ihrer Ergebnisse ausdrucken? Wenn es sich um eine 303-Weiterleitung handelt - was so klingt wie es ist (da der Controller nicht aufgerufen wird), ist es höchstwahrscheinlich, dass Sie ein Login-Spiel-Session-Cookie bereitstellen müssen, um die POST-Methode auszuführen.

diese Antwort sehen, wie in Play 2 ein Auth-Cookie zu erhalten: https://stackoverflow.com/a/13953375/286550

2

Für Ihre Erholung Dienstleistungen testen, zunächst einmal sollten Sie eine gefälschte Anwendung starten.

FakeApplication fakeApplication=fakeApplication(); 
start(fakeApplication); 

Und am Ende pf Ihren Test-es unverbindliche ist es

stop(fakeApplication); 

zu stoppen Wenn Sie viele Testmethoden haben Sie diese Methoden in Ihrer Testklasse hinzufügen können Testprozess zu erleichtern.

FakeApplication fakeApplication = fakeApplication(); 

@Before 
public void beforeTest() { 
    start(fakeApplication); 
} 

@After 
public void afterTest() { 
    stop(fakeApplication); 
}