假设我有以下情况(显然我简化了):“部门”中的“经理”“批准”“员工”的“费用”。

我在这里的测试是测试返回以下内容的查询:D1和D2之间的部门'HR'的所有经理在$ X以上的所有费用...

我意识到有2种方法可以做到这一点:

  • 从头开始-创建用户/组用户,添加权限,创建安全级别,添加费用并测试您的查询。
  • 导入已经有一些数据的数据库,并测试返回结果是否与您期望的结果一样?

  • 选项1的问题在于“创建环境”要花很长时间才能对其进行测试。

    选项2的问题是“导入”一个1GB(或更多)的数据库需要很长时间,然后只需运行查询并查看预期结果是否正确即可。

    我想知道是否有第三种方法?或对上述现有替代方案进行任何改进。

    谢谢!!!

    最佳答案

    我建议您看看DbUnit-这是一个旨在促进数据库测试的库。我通常采用的方法是在main方法中编写一些代码,该方法将在.csv文件(每个表一个)中生成我需要的测试数据,然后使用H2创建填充有该数据的内存表。

    通常看起来像这样:

    public static void main(final String args) {
      final DatabaseConnection conn = new DatabaseConnection(getConnectionToDbWithRealData());
      final QueryDataSet dataset = new QueryDataSet(conn);
      dataset.addTable("foo", "select * from foo where bar = 'xyz'");
      new CsvDataSetWriter(getOutputFile()).write(dataset);
    }
    


    CREATE TABLE foo (
      ...
    ) AS SELECT * FROM CSVREAD('classpath:/foo.csv', null, 'null=null');
    

    创建数据集可能需要一个小时左右的时间,但是您可以在几秒钟内按需重新生成它。

    09-11 19:29
    查看更多