我有访问数据库的lagecy ASP.Net代码。有数据访问层,它形成sqlcommands并在数据库上执行。
对数据访问层进行单元测试的最佳方法是什么?我们应该实际连接到数据库并执行测试用例还是只使用假货?
使用垫片是否是个好主意(如下文所述)?
答案 0 :(得分:2)
假设您的旧DLL已被管理,您应该能够在VS2012中使用Fakes功能。假货真的是为了做到这一点。 Fakes的典型用法如下:
答案 1 :(得分:2)
测试数据访问层的最佳方法是编写实际连接到数据库的集成测试。使用假货(无论是Microsoft Fakes还是任何其他测试隔离框架)都不是一个好主意。这样做会阻止您验证数据访问层中的查询逻辑,这就是您想要首先测试它的原因。
通过粒度集成测试通过共享内存协议访问本地SQL数据库,您可以轻松地每分钟执行数百个测试。但是,每个测试必须负责创建自己的测试环境(即它访问的表中的测试记录)并清理它以便允许可靠的测试执行。如果您的数据访问层未明确管理事务,请首先使用TransactionScope在每次测试结束时自动回滚所有更改。这是最简单和最好的选项,但是如果这不起作用(如果遗留代码在内部管理事务),请尝试删除每个测试开始时先前测试留下的数据。或者,您可以通过始终为每个测试中的所有记录使用新的唯一主键来确保测试不会相互影响。通过这种方式,您可以每次测试每次测试数据库清理一次,并提高性能。