java - 如何在 Play 测试中从基于 InputStream 的结果中获取内容

标签 java playframework akka akka-stream playframework-2.6

我在玩 2.6,使用 Java

我的 Controller 返回:

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

如何在测试中检索从输入流发出的结果的内容?

最佳答案

如异常消息所述,由于您的结果是流实体,因此请使用 contentAsString 的版本它需要一个 Materializer。这是来自 HelpersTest.java 的示例在使用该方法的 Play 存储库中:

@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"));
    }
}

关于java - 如何在 Play 测试中从基于 InputStream 的结果中获取内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48339840/

相关文章:

scala - 什么时候在 Scala 中使用 SBT 和 Ivy 模棱两可地选择具有相同定义和类路径的两个类?

java - 如何在 application.conf 上引用 .properties 值

java - this(context, 0) 是什么意思AlertDialog源码

java - 使用 Swing 打印多页

Java 正则表达式非常慢(将嵌套量词转换为所有格量词)

multithreading - Play Framework -如何监视我的应用程序线程池?

java - 我怎么推剧!框架 java 应用程序到 Digital Ocean 液滴中的 Dokku?

java - Akka Java OneForOneStrategy 示例未编译

scala - 让 Akka-2 实例每 n 个时间单位向自己发送一条消息,而不会溢出邮箱

java - 询问倍数权限android 6.0