生成复杂数据库(EAV)的单元测试数据

时间:2011-08-09 03:20:10

标签: database unit-testing testing entity-attribute-value

我正在使用遗留应用程序,该应用程序使用了众所周知/可怕的数据建模模式(称为EAV)。这使得选择在DAL的单元测试期间难以使用的数据生成策略。为什么?因为,除了表之间的正常Fk / Pk约束(我们在可能时使用),还有其他关系/约束,只有应用层知道并强制执行。

根据这个article,最容易编写和维护的数据测试依赖于外部定义的静态数据集。但是,似乎尝试创建一个数据集,其中包含已经在我的应用程序层中“手动”建模的关系,将是DRY违规主要PITA太启动。另一方面,使用我的应用程序层生成测试数据感觉更令人反感,因为它违反了单元测试的主要指令(隔离),因为应用程序层中的回归可能导致我的DAL层失败。

出于这个原因,我倾向于使用静态数据集选项,即除非必须处理单元测试EAV模型的其他人可以使用替代方案。

非常感谢。

1 个答案:

答案 0 :(得分:1)

如果DAL不负责在数据存储中强制执行某些应用程序规则,则无需确保测试数据符合那些更高级别的规则。单元测试只需要验证DAL是否强制执行 其责任的规则 - 可能是类似于数据库约束,数据类型等等。数据只需要符合DAL的前提条件本身构成一个有效的测试用例。将在应用程序层的单元测试中检查更高级别的规则,其中DAL将被存根或模拟。在这些假设下,静态数据集或使用普通代码生成的数据集可能足以用于DAL测试。

很可能应用程序的“遗留”特性使得单独对应用程序和DAL层进行单元测试即使不是不可能也很困难。实际上,这两个层共同是单个(如果复杂的)“单元”。在这种情况下,作为权宜之计,使用应用层生成测试数据是可接受的(或者可能是“可容忍的”是正确的词)。实际上,这样的一代将构成集团“单位”的更多测试案例。应用层回归导致的DAL失败应作为一个,另一个或两个层中的候选错误进行调查。任何时候都试图将这两层分成单独的单元,从长远来看可能会带来红利。