【发布时间】: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