最佳答案
我使用过很多web应用程序,它们都是由后台复杂程度各异的数据库驱动的。通常,有一个ORM层独立于业务和表示逻辑。这使得单元测试业务逻辑相当简单;事情可以在离散的模块中实现,测试所需的任何数据都可以通过对象模拟来伪造。
但是测试ORM和数据库本身总是充满了问题和妥协。
这些年来,我尝试了一些策略,但没有一个能让我完全满意。
用已知数据加载测试数据库。对ORM运行测试并确认返回正确的数据。这里的缺点是,您的测试DB必须跟上应用程序数据库中的任何模式更改,并且可能会不同步。它还依赖于人工数据,并且可能不会暴露由于愚蠢的用户输入而发生的错误。最后,如果测试数据库很小,就不会发现缺少索引这样的低效率。(好吧,最后一点并不是单元测试真正应该使用的,但它并没有坏处。)
加载一个生产数据库的副本并对其进行测试。这里的问题是,在任何给定的时间,您可能都不知道生产DB中有什么;如果数据随时间变化,可能需要重写测试。
有些人指出,这两种策略都依赖于特定的数据,单元测试应该只测试功能。为此,我看到了一些建议:
您在测试数据库驱动的应用程序时使用了哪些策略?对你来说最有效的方法是什么?