JUnit如何对play.mvc.Result的内容进行断言?

3

如何对Play! JSON操作结果值中的内容进行断言?我从一个操作返回一个新的(甚至是null)JSON ObjectNode,并尝试在单元测试的结果中对其进行断言,但在response.wrappedResult.body中看不到该值(无论是null还是其他)。

例如,在我的操作中,如果我返回了一个null的JSON Object Node,

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个回答

3
请参考Play文档中有关Java测试的控制器测试中的测试您的控制器部分,了解如何正确调用操作并测试结果内容。
@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中。如果直接调用操作方法,则不会得到相同的结果。


status() 方法定义在哪里?contentType()、charset() 和 contentAsString() 方法呢? - supertonsky
1
试一下从文档的上一页导入的方法。可能在Helper类中。 - Rich Dougherty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接