Rob*_*vey 5 c# asp.net-mvc sql-server-2008 linq-to-sql asp.net-mvc-2
我有一个现有的ASP.NET MVC应用程序,在SQL Server数据库中有一些示例数据,工作正常.
假设我已经拥有了所有必需的存储库和IOC,是否有一个工具可以从一组表中提取数据,并将其"冻结"成一个模拟对象(可能使用XML文件来存储数据) ,以便我可以分离数据库并使用模拟数据进行单元测试?
根据您要测试的具体内容,可能会有不同的方法。
如果您想测试数据访问逻辑,那么这不再是单元测试,而是集成测试。对于此类测试,最好能够轻松地用一些更轻的甚至是内存数据库(例如 SQLite)替换真实数据库,该数据库将在运行每个测试之前重建。如果您使用 ORM,那么这项任务很简单。您需要做的就是从现有数据库生成 SQL 脚本(INSERT INTO...),修改方言并使其适应 SQLite(如有必要),读取并注入到 SQLite 文件中,最后剩下的就是指示您的数据访问层使用SQLite方言和连接字符串进行单元测试。
现在,如果您不使用 ORM 并且您的数据访问逻辑与 MSSQL 相关联,那么事情会变得更难看,您将需要一个实时数据库来执行这些集成测试。在这种情况下,我建议您通过仅修改连接字符串来复制您将用于测试的真实数据库。您将再次需要正确地setup(teardown最好在事务中)此测试数据库,以便将其置于测试的已知状态。
如果您想测试依赖于这些存储库的代码(例如您的控制器),您甚至不需要费心模拟数据,因为您的控制器依赖于抽象存储库而不是真正的实现(不是吗),因此您可以轻松模拟存储库的方法,以测试控制器中的逻辑。