假设我有以下情况(显然我简化了):“部门”中的“经理”“批准”“员工”的“费用”。
我在这里的测试是测试返回以下内容的查询: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');
创建数据集可能需要一个小时左右的时间,但是您可以在几秒钟内按需重新生成它。