gpt4 book ai didi

java - 如何在 Play 2.1.0 中测试 XML 结果

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:56 24 4
gpt4 key购买 nike

我正在尝试为 Play 2.1.0 的 Controller 方法编写一个测试用例。该方法接收一个 XML 对象,执行一些操作并根据 XML 返回 OK 或 BAD_REQUEST,其中有一部分:

@BodyParser.Of(BodyParser.Xml.class)
public static Result save() {
Document dom = request().body().asXml();
System.out.println(request().body());
if (dom == null) {
return badRequest(error.render("Se esperaba Xml"));
} else {
...

当我尝试用curl 测试它时,它工作正常:

$ curl --header "Content-type: text/xml" --request POST --data '<gloo>Guillaume</gloo>' -verbose http://localhost:9000/api/xml/
* About to connect() to localhost port 9000 (#0)
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9000 (#0)
> POST /api/xml/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:9000
> Accept: */*
> Referer: rbose
> Content-type: text/xml
> Content-Length: 22
>
* upload completely sent off: 22 out of 22 bytes
< HTTP/1.1 200 OK
< Content-Type: text/xml; charset=utf-8
< Content-Length: 89
<


* Connection #0 to host localhost left intact
<?xml version="1.0" encoding="utf-8"?><gloo>dd8d191c-8a27-4dad-a624-1c5a6a5d9d03</gloo>

但是当我尝试测试时,看起来我正在将错误的 XML 传递给 Controller ​​。这是我的测试用例:

@Test
public void saveActionRespondsOkOnValidContent() {
running(fakeApplication(), new Runnable() {
public void run() {
Result result = route(fakeRequest(POST, "/api/xml/")
.withHeader(CONTENT_TYPE, "text/xml").withTextBody(
"<gloo>Probando el API xml</gloo>"));
System.out.println(contentAsString(result));
assertThat(status(result)).isEqualTo(OK);
assertThat(contentType(result)).isEqualTo("text/xml");
assertThat(contentAsString(result)).isNotEmpty();
}
});
}

这就是我运行“Play 测试”时得到的结果:

...
DefaultRequestBody(None,None,None,None,None,None,true)
<?xml version="1.0" encoding="utf-8"?><gloo>Se esperaba Xml</gloo>
[error] Test api.XmlApiTests.saveActionRespondsOkOnValidContent failed: expected:<[2]00> but was:<[4]00>
...

第一行由 Controller 跟踪,表示没有 XML。第二个是由测试用例跟踪的,表示收到的错误消息。第三个是我的测试用例失败:当我等待 OK 时,我收到了 BAD_REQUEST。

所以我的问题(最后)是:如何编写一个测试用例来将有效的 XML 发送到我的方法?

最佳答案

FakeRequest 中似乎有一个方法 withXmlBody,如文档 here 所示。 。使用该方法而不是 withTextBody 应该会有所帮助。

另一件事要尝试(我自己没有测试过)是将 Content-Type 更改为 application/xml

关于java - 如何在 Play 2.1.0 中测试 XML 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com