Play框架 - 测试POST控制器方法

And*_*dna 6 java unit-testing playframework-2.1

我想在我的控制器中测试我的一个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));
    }
Run Code Online (Sandbox Code Playgroud)

问题是,此测试失败,因为根本没有调用控制器方法,所以我的questionSetCollectionDAO方法不会被调用.

我事件在方法的顶部放置了一些打印:

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

我在控制台上看不到任何输出.

如果这不是我用虚假请求调用控制器方法的方式,我该怎么办呢?

我读到了fakeApplication但是我还有其他方法可以对POST控制器方法进行一些简单的测试吗?

tma*_*hal 0

你能打印出你的结果的http状态码吗?如果它是 303 重定向 - 听起来确实如此(因为控制器没有被调用),那么您很可能需要提供登录播放会话 cookie 来执行 POST 方法。

请参阅此答案,了解如何在 Play 2 中获取身份验证 cookie: /sf/answers/976736281/