【问题标题】:Unit testing side outputs单元测试侧输出
【发布时间】:2017-11-13 12:30:15
【问题描述】:

我正在使用具有 1 个主输出和 1 个辅助输出的 Apache Beam 对 ParDo 函数进行单元测试:

public class GetPubsubMessageDoFn extends DoFn<PubsubMessage, PubsubPayload.PubsubPayloadDTO> {

  @ProcessElement
  public void processContext(ProcessContext processContext) {
    PubsubPayload pubsubPayload = new PubsubPayload(processContext.element());
    processContext.output(pubsubPayload.getPayload()); //main output
    processContext.output(ORIGIN_PATH_TUPLE_TAG, GCSUtils.toGSURL(pubsubPayload.getPayload().bucket, pubsubPayload.getPayload().name)); //side output
  }
}

我设置了一个单元测试类来测试主输出和副输出:

 public class GetPubsubMessageDoFnTest {

      private DoFnTester<PubsubMessage, PubsubPayloadDTO> getPubsubMessageDoFn;   
      private Injector injector;
      private final TupleTagList tags = TupleTagList.of(PUBSUB_PAYLOAD_DTO_TUPLE_TAG).and(ORIGIN_PATH_TUPLE_TAG);


      @Before   
      public void setup() {
        injector = Guice.createInjector(new GetPubsubMessageTestModule());
        this.getPubsubMessageDoFn = DoFnTester.of(injector.getInstance(GetPubsubMessageDoFn.class));
        this.getPubsubMessageDoFn.setOutputTags(tags); //Does not compile
      }

  //Tests

根据the documentation,我应该能够使用setOutputTags(tags) 设置侧面输出,只是DoFnTester 类中不存在该功能。我正在使用Google Cloud Dataflow dependency 版本 2.1.0,它确实使用了 Apache Beam 功能的一个子集,但即使查看 DoFnTester setOutputTags 的 Apache Beam 参考文档也没有列出(尽管它在介绍)。

【问题讨论】:

    标签: java unit-testing google-cloud-dataflow apache-beam


    【解决方案1】:

    这些方法在 2.1.0 中不可用。事实上,DoFnTester 已被弃用,请参阅https://issues.apache.org/jira/browse/BEAM-3159

    建议使用带有 DirectRunner 的 TestPipeline 在其 DoFn 上测试 ParDo。您可以使用 TestStream 仔细控制输入流。在这个主题上看到一个很好的blog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多