我正在为Apache Beam管道编写JUnit测试。我开始使用DoFnTester,虽然Apache Beam"测试你的管道"中的例子已经被弃用了。文档是指已被弃用的方法。
我现在正在使用推荐的TestPipeline和PAssert,但我对PAssert有困难,因为我见过的所有示例都使用了字符串。
管道输出对象,因此测试失败作为其比较对象。我的第一直觉是创建派生对象并覆盖equals()。我无法让它工作(我只使用Java几周,所以也许没有帮助)并且测试仍在调用原始的equals()方法。
然后我想到迭代输出PCollection,因为我正在使用测试管道,管道中最多只有一个或两个元素,但我找不到任何如何做到这一点的例子。不确定这是否是正确的测试方式。
我已经阅读了Apache文档,并发现此评论" PAssert对象不支持Object.equals(Object)。如果您打算测试对象相等性,请改用containsInAnyOrder(T ...)的变体。"。这听起来正是我需要的,但问题是我不知道如何创建containsInAnyOrder()的变体来做到这一点,我找不到任何例子。
我已经用尽了google的东西!许多示例已过时(包括Apaches自己的文档)引用已弃用的方法。我在PAssert中找到的所有例子都假设输出元素是字符串。
我需要做的就是覆盖containsInAnyOrder,这样我就可以进行自己的对象比较了。有人可以帮忙吗?
PAssert.that(output).containsInAnyOrder(expected);
如果有人能指出我会非常感激的一些例子。
答案 0 :(得分:0)
重写对象类中的pd.PeriodIndex(df['dates'], freq = 'Q-MAR').strftime('%F')
方法以适当地比较两个对象。 equals
只是使用Assert
方法来比较对象。有关如何覆盖equals
的信息,请参见this page。