我正在尝试为管道编写单元测试。管道包括将结果写入BigQuery的步骤。在测试中,在写入BigQuery之前测试最后一步是适当的。在这种情况下,复合转换结果的返回类型为PCollection<TableRow>
。我试图断言该结果等于我使用TableRow
并分别设置值手动创建的new TableRow()
。
是否可以将手动创建的TableRow转换为PCollection,还是可以从PCollection中提取TableRow?或者,我是否需要编写另一个转换以将复合转换的结果转换为String
并将预期结果(MANUALLY_CREATED_TABLEROW
)转换为String
并检查它们的相等性?
public void testPipeline() throws Exception {
PCollection<String> input = p.apply(Create.of(STRING_MESSAGE).withCoder(StringUtf8Coder.of()));
PCollection<TableRow> output = input.apply(new MyCompositeTransform());
PAssert.that(output).containsInAnyOrder(MANUALLY_CREATED_TABLEROW);
p.run().waitUntilFinish();
}
有a thread的错误和问题是相似的。