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

Ben*_*Ben 5 java csv testing junit apache-flink

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

但是我遇到了一个问题:因为并行性,flink会用"随机"行顺序写出它的输出csv文件,因此我不能轻易断言输出文件等于Junit的预期输出文件.

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

有一个简单的解决方案吗?

cjs*_*hno 5

测试您是否具有预期的行数.然后,将预期的行存储在List中.迭代实际行并确保它们"在"预期行列表中并从列表中删除该条目.像(groovy伪代码)的东西:

assert actualLines.size() == expectedLines.size()

actualLines.each { line->
    assert line in expectedLines
    expectedLines.remove(line)
}    
Run Code Online (Sandbox Code Playgroud)

这应该测试您是否具有预期的行数并且您具有预期的行值而不考虑订单.


Fab*_*ske 5

您可以分两个阶段检查您的计划:

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

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