我们正在运行3个Oracle数据库,每个数据库都有100多个表。为了测试我们的代码,我们正在研究用testdata填充它们的替代方法。我们到目前为止找到的工具是DBSetup和DBUnit。
我们使用这些工具遇到的问题是指定数据所需的所有手动工作。例如,如果我要测试表D,我还需要用数据填充表A,B,C。我不关心数据是什么,我只关心表D中的数据。我必须填充A B C的原因是因为对表D中派生键的一致性检查。
我的问题是这种问题是如何处理的?从可测试性的角度来看,这是否是设计糟糕的数据库的标志?
答案 0 :(得分:0)
如果数据库严格用于测试目的,我没有看到任何阻止您放弃一致性检查(FK等),填充数据,测试数据,截断表格以及稍后再次读取一致性检查的内容。
我能想到的另一种选择
1.复制表格结构(列等),并在那里进行测试
2.改变所有FK用"可推迟最初推迟"这基本上会推迟一致性检查,直到你提交交易
答案 1 :(得分:0)
我们停止使用dbunit并开始填充db programmaticaly。这样您就可以创建一个工厂方法来创建具有所有依赖关系的实体。然后你可以尽可能多地使用这种方法。
我会避免在测试过程中删除约束。如果您测试的代码创建/修改数据,您可能会得到没有约束的误报结果。与性能相同
如果你必须填充100个表只是为了向表X插入任何东西,那么是的,我会说设计可能存在一些问题。想想你是否可以更好地将你的域划分为更小的聚合根。但是,如果你只需要其他一些表,那么我会说它没有任何问题