有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    最终我能够使用DB单元。如果您使用的是Spring,那么可以通过这种方式设置DB连接(@beforeach来自JUnit5

    @Autowired
    private DataSource dataSource;
    private DatabaseDataSourceConnection dbUnitConnection;
    
    @BeforeEach
    void beforeEach() throws SQLException {
        dbUnitConnection = new DatabaseDataSourceConnection(dataSource, schema);
    }
    

    对于断言,您需要原始问题中的代码。您还需要指定要在table-ordering.txt中测试的所有表名(该resource实例应指向该文件)。文件必须放在所有CSV文件所在的同一目录中。{}的示例:

    my_table_1
    my_table_2
    my_table_3
    

    包含预期数据的CSV文件必须分别具有名称my_table_1.csvmy_table_2.csvmy_table_3.csv。如果需要断言null值,则必须在CSV中显式指定单词“null”。还要注意CSV中的数据。就我而言,我在标题中多了一个空白符号。在文本编辑器中,它是不可见的,但是测试失败了,而且调试非常困难

    CSV转义符号为“\”