JUnit断言play.mvc.Result内容?

时间:2014-04-20 23:35:44

标签: junit playframework

如何对Play内部的内容进行断言! JSON操作结果值?我从一个动作返回一个新的(甚至是空的)JSON ObjectNode,并试图在单元测试的结果中断言它,但是在response.wrappedResult.body中没有看到值(null或其他)。

例如,在我的操作中,如果我返回一个空的JSON对象节点,

ObjectNode response = null;
return ok(response);

或者如果我返回测试值,

ObjectNode response = Json.newObject();
response.put("testKey", "testValue");
return ok(response);

然后我针对结果写了一个测试,

@Test
public void MyTest() {
    Result result = MyController.myAction();
    // assert against null or specified values here
}

然后我探索整个对象图,

result.wrappedResult.body

我没有看到任何看起来像我的指定结果的断言。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

Play docs on Java testing中查看测试您的控制器,了解如何正确调用您的操作并测试结果内容的示例。

@Test
public void callIndex() {
    Result result = callAction(
      controllers.routes.ref.Application.index("Kiki")
    );
    assertThat(status(result)).isEqualTo(OK);
    assertThat(contentType(result)).isEqualTo("text/html");
    assertThat(charset(result)).isEqualTo("utf-8");
    assertThat(contentAsString(result)).contains("Hello Kiki");
}

Play会在调用操作时执行一些聪明的操作,因此您需要将调用包裹在callAction中。如果直接调用action方法,则不会得到相同的结果。