代码之家  ›  专栏  ›  技术社区  ›  apflieger

如何在播放测试中从基于InputStream的结果中获取内容

  •  4
  • apflieger  · 技术社区  · 6 年前

    我正在玩2.6,使用Java

    我的控制器返回:

    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
    

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

    2 回复  |  直到 6 年前
        1
  •  5
  •   Jeffrey Chung    6 年前

    正如异常消息所述,由于您的结果是流实体,请使用 contentAsString 这需要 Materializer . 以下是 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"));
        }
    }
    
        2
  •  1
  •   apflieger    4 年前

    从akka 2.6的重头戏2.8开始,“ActorMaterializer”已被弃用。这是获得“物化器”的方法

    Materializer mat = Materializer.matFromSystem(actorSystem);