使用随机行顺序(Junit)测试csv文件的相等性



我正在使用Apache Flink开发一个项目,并使用junit测试我的运算符。

然而,我面临着一个问题:由于并行性,flink将以"随机"的行顺序写入其输出csv文件,因此我无法轻易断言输出文件等于Junit的预期输出文件。

性能不是问题,因为我们谈论的是小文件(<100行),并且仅用于测试。

有简单的解决方案吗?

您可以分两个阶段检查程序:

  1. 单独测试您的单个函数,例如MapFunction。在这里,您只检查自己的代码,输出应该是确定性的(假设您的函数是确定性的)。

  2. 测试整个程序。在这里,您的代码将由Flink执行,结果的顺序是不确定的(除非您对其进行排序)。在Flink中,我们有一些实用程序类来测试完整的程序(主要用于运行我们自己的集成测试)。这些类产生一个小型的本地Flink实例,运行测试,并将其与预期结果(排序或无序)进行比较。查看MultipleProgramsTestBase以及它是如何使用的,例如在DegreesITCase中。您可以通过包含flink测试utils-Maven依赖项来使用MultipleProgramsTestBase。根据您使用的Flink版本,内容可能与当前主版本有所不同。如果您有问题,请在此处发表评论或ping Flink用户邮件列表。

测试您是否具有预期的行数。然后,将预期的行存储在列表中。遍历实际行,确保它们"在"预期行列表中,并从列表中删除该条目。类似(groovy伪代码):

assert actualLines.size() == expectedLines.size()
actualLines.each { line->
    assert line in expectedLines
    expectedLines.remove(line)
}    

这应该测试您是否具有预期的行数,以及是否具有与顺序无关的预期行值。

相关内容

  • 没有找到相关文章

最新更新