2013-04-21 33 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); 
}