tdd红移集成测试(或其他SQL DB)。使用Java中的CSV文件验证表内容
我想创建一个集成测试,在不知道表结构的情况下检查任何DB表内容。在某种测试框架中,我放置了一组名为table_to_test.csv
的CSV文件,测试选取这些文件并断言与DB内容相等
通过文档,这可以通过使用DBUnit实现
IDataSet databaseDataSet = dbUnitConnection.createDataSet();
ITable actualTable = databaseDataSet.getTable(tableName);
// Load expected data from an CSV dataset
IDataSet expectedDataSet = new CsvURLDataSet(resource.getURL());
ITable expectedTable = expectedDataSet.getTable(tableName);
// Assert actual database table match expected table
org.dbunit.Assertion.assertEquals(expectedTable, actualTable);
虽然这正是我所需要的,但这个解决方案似乎没有文档记录,缺乏灵活性,因此可能不可靠。我也不能很快找到DBUnitBug tracker
我想知道是否有其他解决办法。CSV到CSV的比较框架也可以工作,因为在Redshift上我可以将数据从表卸载到CSV文件
# 1 楼答案
最终我能够使用DB单元。如果您使用的是Spring,那么可以通过这种方式设置DB连接(@beforeach来自JUnit5)
对于断言,您需要原始问题中的代码。您还需要指定要在}的示例:
table-ordering.txt
中测试的所有表名(该resource
实例应指向该文件)。文件必须放在所有CSV文件所在的同一目录中。{包含预期数据的CSV文件必须分别具有名称
my_table_1.csv
、my_table_2.csv
和my_table_3.csv
。如果需要断言null
值,则必须在CSV中显式指定单词“null”。还要注意CSV中的数据。就我而言,我在标题中多了一个空白符号。在文本编辑器中,它是不可见的,但是测试失败了,而且调试非常困难CSV转义符号为“\”