【问题标题】:Play framework - testing POST controller methodPlay框架——测试POST控制器方法
【发布时间】:2013-04-21 00:04:40
【问题描述】:

我想在我的控制器中测试我的一种 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 控制器方法进行一些简单的测试吗?

【问题讨论】:

  • 你有没有想过这个问题或者发现了什么?

标签: java unit-testing playframework-2.1


【解决方案1】:

为了测试你的休息服务,首先你应该启动一个假的应用程序。

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

在你的测试结束时,建议停止它

    stop(fakeApplication);

如果您有很多测试方法,您可以将这些方法添加到您的测试类中以方便测试过程。

FakeApplication fakeApplication = fakeApplication();

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

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

【讨论】:

    【解决方案2】:

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

    有关如何在 Play 2 中获取身份验证 cookie,请参阅此答案:https://stackoverflow.com/a/13953375/286550

    【讨论】:

      猜你喜欢
      • 2016-11-14
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      相关资源
      最近更新 更多