如何在 Play 测试中从基于 InputStream 的结果中获取内容
How can I get content from InputStream based results in Play tests
我正在使用 Play 2.6,使用 Java
我的控制器returns:
public Result xml() {
return Results.ok(new ByteArrayInputStream("<someXml />".getBytes()));
}
我想在测试中解析结果:
Result result = new MyController().xml();
play.test.Helpers.contentAsString(result)
这抛出
failed: java.lang.UnsupportedOperationException: Tried to extract body from a non strict HTTP entity without a materializer, use the version of this method that accepts a materializer instead
如何检索测试中输入流发出的结果内容?
如异常消息所述,由于您的结果是流实体,因此请在使用该方法的 Play 存储库中使用 contentAsString
that takes a Materializer
. Here's an example from HelpersTest.java
的版本:
@Test
public void shouldExtractContentAsStringFromAResultUsingAMaterializer() throws Exception {
ActorSystem actorSystem = ActorSystem.create("TestSystem");
try {
Materializer mat = ActorMaterializer.create(actorSystem);
Result result = Results.ok("Test content");
String contentAsString = Helpers.contentAsString(result, mat);
assertThat(contentAsString, equalTo("Test content"));
} finally {
Future<Terminated> future = actorSystem.terminate();
Await.result(future, Duration.create("5s"));
}
}
从带有 akka 2.6 的 Play 2.8 开始,'ActorMaterializer' 已被弃用。这是获得 'Materializer'
的方法
Materializer mat = Materializer.matFromSystem(actorSystem);
我正在使用 Play 2.6,使用 Java
我的控制器returns:
public Result xml() {
return Results.ok(new ByteArrayInputStream("<someXml />".getBytes()));
}
我想在测试中解析结果:
Result result = new MyController().xml();
play.test.Helpers.contentAsString(result)
这抛出
failed: java.lang.UnsupportedOperationException: Tried to extract body from a non strict HTTP entity without a materializer, use the version of this method that accepts a materializer instead
如何检索测试中输入流发出的结果内容?
如异常消息所述,由于您的结果是流实体,因此请在使用该方法的 Play 存储库中使用 contentAsString
that takes a Materializer
. Here's an example from HelpersTest.java
的版本:
@Test
public void shouldExtractContentAsStringFromAResultUsingAMaterializer() throws Exception {
ActorSystem actorSystem = ActorSystem.create("TestSystem");
try {
Materializer mat = ActorMaterializer.create(actorSystem);
Result result = Results.ok("Test content");
String contentAsString = Helpers.contentAsString(result, mat);
assertThat(contentAsString, equalTo("Test content"));
} finally {
Future<Terminated> future = actorSystem.terminate();
Await.result(future, Duration.create("5s"));
}
}
从带有 akka 2.6 的 Play 2.8 开始,'ActorMaterializer' 已被弃用。这是获得 'Materializer'
的方法Materializer mat = Materializer.matFromSystem(actorSystem);