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

pal*_*rey 6 java apache-beam

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

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

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

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

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

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

我需要做的就是覆盖 containsInAnyOrder 以便我可以进行自己的对象比较。任何人都可以帮忙吗?

PAssert.that(output).containsInAnyOrder(expected);
Run Code Online (Sandbox Code Playgroud)

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

use*_*109 2

重写equals对象类中的方法以适当地比较两个对象。Assert只是使用该equals方法来比较对象。有关如何覆盖的信息,请参阅此页equals