java - 使用 PAssert containsInAnyOrder() 比较对象的测试管道

标签 java apache-beam

我正在为 Apache Beam 管道编写 JUnit 测试。我开始使用 DoFnTester,但它已被弃用,尽管 Apache Beam“测试您的管道”文档中的示例引用了已被弃用的方法。

我现在正在使用推荐的 TestPipeline 和 PAssert,但我在使用 PAssert 时遇到困难,因为我看到的所有示例都使用字符串。

管道输出对象,因此测试作为其比较对象失败。我的第一直觉是创建一个派生对象并覆盖 equals()。我无法让它工作(我只使用 Java 几个星期,所以这可能没有帮助)并且测试仍在调用原始的 equals() 方法。

然后我想到在使用测试管道时迭代输出 PCollection,并且管道中最多只有一个或两个元素,但我找不到如何执行此操作的任何示例。不确定这是否是正确的测试方法。

我通读了 Apache 文档并发现此评论“PAsert 对象不支持 Object.equals(Object)。如果您打算测试对象相等性,请改用 containsInAnyOrder(T...) 的变体。 ”。这听起来正是我所需要的,但问题是我不知道如何创建 containsInAnyOrder() 的变体来执行此操作,而且我找不到任何示例。

我已经没有东西可以谷歌了!许多示例都已过时(包括 Apache 自己的文档),引用了已弃用的方法。我在 PAssert 中找到的所有示例都假定输出元素是字符串。

我需要做的就是覆盖 containsInAnyOrder,这样我就可以进行自己的对象比较。谁能帮忙?

PAssert.that(output).containsInAnyOrder(expected);

如果有人能指出一些例子,我将不胜感激。

最佳答案

覆盖对象类中的 equals 方法以适本地比较两个对象。 Assert 只是使用 equals 方法来比较对象。引用this page了解如何覆盖 equals

关于java - 使用 PAssert containsInAnyOrder() 比较对象的测试管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50405891/

相关文章:

java - Spring boot servlet 在 Tomcat 但不是 Jetty 中显示性能问题

java - 有没有办法在数据流中创建从 pubsub 主题读取的批处理作业?

google-cloud-platform - 为 Pubsub 到 Bigquery 流构建此 GCP 数据流示例时出错

scala - Scio/apache 光束 java.lang.IllegalArgumentException : unable to serialize method

java - 使用 DataFlow (Apache Beam) 将 ISO-8859-1 加载到 BigQuery 时出现问题

java - 如何使用java中的动态类加载来加载同一类的多个版本

java - 想要访问另一个类中的连接对象

java - 霍夫曼编码 - 符号分组

c# - 类之间的聚合和组合关系