1

我有访问数据库的老旧 ASP.Net 代码。有数据访问层形成sql命令并在数据库上执行。

对数据访问层进行单元测试的最佳方法是什么?我们应该真正连接到数据库并执行测试用例还是只使用假货?

使用 shim 是个好主意吗(在下面的帖子中描述)?

http://msdn.microsoft.com/en-us/library/hh549176.aspx

4

2 回答 2

2

假设您的旧 DLL 是托管的,您应该能够在 VS2012 中使用 Fakes 功能。假货真的是为了做到这一点。假货的典型用法如下:

  1. 创建一个新的单元测试项目
  2. 添加对此旧版 DLL 的引用(例如 Legacy.DLL)。确保在此单元测试项目中引用了所有相关的 DLL。
  3. 右键单击解决方案 Reference 文件夹中的 Legacy.DLL,选择“Add Fakes Assembly”。这将为 Legacy.DLL 中定义的类型生成填充程序。
  4. 还要添加对您的项目代码的引用(假设您要对您的产品方法进行单元测试)
  5. 在 TestMethod1 中,您可以启动 Legacy.DLL 中定义的匀场方法并测试您的产品代码。

您还可以在http://msdn.microsoft.com/en-us/library/hh708916.aspx上找到有用的信息

于 2012-10-10T00:12:39.830 回答
2

测试数据访问层的最佳方法是编写实际连接到数据库的集成测试。使用 fakes 不是一个好主意(无论是 Microsoft Fakes 还是任何其他测试隔离框架)。这样做会阻止您验证数据访问层中的查询逻辑,这就是您首先要对其进行测试的原因。

通过通过共享内存协议访问本地 SQL 数据库的精细集成测试,您可以轻松地每分钟执行数百个测试。但是,每个测试都必须负责创建自己的测试环境(即它访问的表中的测试记录)并清理它以允许可靠的测试执行。如果您的数据访问层没有显式管理事务,请首先使用 TransactionScope 在每次测试结束时自动回滚所有更改。这是最简单也是最好的选择,但是如果这不起作用(如果您的遗留代码在内部管理事务),请尝试在每个测试开始时删除先前测试留下的数据。或者,您可以通过始终为每个测试中的所有记录使用新的唯一主键来确保测试不会相互影响。

于 2012-10-19T21:13:39.497 回答