2013-04-21 32 views
6

我想測試我的控制器我POST方法之一,所以我寫的是這樣的:遊戲框架 - 測試POST控制器方法

@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)); 
    } 

的事情是,因爲控制方法,則不會調用此測試失敗根本不會調用我的questionSetCollectionDAO方法。

我的事件把一些印在方法的頂部:

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

,我沒有看到任何控制檯輸出。

如果這不是我可以用假請求調用控制器方法的方式,那我該怎麼做?

我讀了關於fakeApplication,但我有沒有其他方式來做一些簡單的測試POST控制器方法?

+1

你有沒有想過或找到其他的東西? – Meredith 2013-07-26 22:12:10

回答

0

你能打印出你的結果的http狀態碼嗎?如果它是一個303重定向 - 它聽起來像是這樣(因爲控制器沒有被調用),所以很可能你需要提供一個登錄的play-session cookie來執行POST方法。

查看如何在播放2得到一個權威性的cookie這樣的回答:https://stackoverflow.com/a/13953375/286550

2

爲了測試您的REST服務,首先你應該開始一個假的應用程序。

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

而在結束pf的你測試它建議報告,以阻止它

stop(fakeApplication); 

如果你有很多的測試方法,你可以在你的測試類添加這些方法,以方便測試過程。

FakeApplication fakeApplication = fakeApplication(); 

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

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