Cha*_*les 21 c# database unit-testing
我正在为使用数据库的应用程序编写单元测试,我希望能够针对某些样本/测试数据运行应用程序 - 但我不确定设置初始测试数据的最佳方法用于测试.
我正在寻找的是一种在测试时对我目前使用的相同数据库(或示意图相同)运行被测代码的方法 - 在每次测试之前,我想确保将数据库重置为插入测试数据之前的干净的石板.
我意识到使用IRepository模式将允许我去除针对实际数据库的测试的复杂性,但我不确定在我的情况下是否可行.
有什么建议或文章能指出我正确的方向吗?
谢谢!
- 编辑 -
谢谢大家,这些都是很棒的建议!我可能会去模拟我的数据访问层,结合一些简单的设置类来准确生成每次测试所需的数据.
Don*_*son 15
这是我尝试使用的一般方法.我设想在大约三个或四个级别进行测试::单元测试,交互测试,集成测试,验收测试.
在单元测试级别,它只是代码.任何数据库交互都是模拟的,可以手动或使用其中一个流行的框架,因此加载数据不是问题.它们运行速度很快,并确保对象按预期工作.这允许非常快速的写测试/写代码/运行测试周期.模拟对象提供每个测试所需的数据.
交互测试测试非平凡类交互的交互.同样,不需要数据库,它被嘲笑了.
现在处于集成级别,我正在测试组件的集成,这就是真正的数据库,队列,服务,yada yada被抛入的地方.如果可以的话,我会使用一个流行的内存数据库,所以初始化不是问题.它始终是空的,我使用实用程序类来擦除数据库并在每次测试之前加载我想要的数据,这样测试之间就没有耦合.
我使用内存数据库遇到的问题是它们通常不支持我需要的所有功能.例如,我可能需要外连接,内存数据库不支持.在这种情况下,我通常会在本地传统数据库(如MySQL)上进行测试,再次在每次测试之前擦除它.由于应用程序在单独的环境中部署到生产环境,因此测试周期不会触及该数据.