java - Redshift 集成测试(或其他 SQL DB)。在 Java 中使用 CSV 文件验证表内容

标签 java tdd integration-testing amazon-redshift dbunit

我想创建集成测试来检查任何数据库表内容而不知道表结构。某种测试框架,我放置了一组名称如 table_to_test.csv 的 CSV 文件,测试选择这些文件并断言与数据库内容相等。

根据文档,这可以使用 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);

尽管这正是我所需要的,但该解决方案似乎没有文档记录、不灵活,因此可能不可靠。我也无法快速找到 DBUnit 错误跟踪器。

我想知道是否有替代解决方案。 CSV 到 CSV 比较框架也可能有效,因为在 Redshift 上我可以将数据从表卸载到 CSV 文件。

最佳答案

最终我能够使用DB Unit。如果您使用Spring,您可以通过这种方式设置数据库连接(@BeforeEach 来自 JUnit5 )

@Autowired
private DataSource dataSource;
private DatabaseDataSourceConnection dbUnitConnection;

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

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

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 转义符号是“\”。

关于java - Redshift 集成测试(或其他 SQL DB)。在 Java 中使用 CSV 文件验证表内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052429/

相关文章:

java - 使用 Activiti Rest Web 服务时出现问题

java - 如何最大化 GWT 中的根面板大小?

java - Spring启动测试期待ConstraintViolationException但收到JpaSystemException

javascript - 组件/集成测试主干 View 等

java - 适用于 iOS 和 Android 平台的跨平台 appium 代码

java - 我们可以在抽象类中使用静态方法吗?

unit-testing - 单元测试站点地图节点

unit-testing - 基于部分单元测试的软件方法

python - 如何对方法对象中的方法进行单元测试?

mongodb - 单元测试 Net core - 与 MongoDB 内存数据库的集成测试