C# 使用现有数据库中的数据在ASP.NET MVC中创建数据库模拟

C# 使用现有数据库中的数据在ASP.NET MVC中创建数据库模拟,c#,asp.net-mvc,linq-to-sql,sql-server-2008,asp.net-mvc-2,C#,Asp.net Mvc,Linq To Sql,Sql Server 2008,Asp.net Mvc 2,我有一个现有的ASP.NET MVC应用程序,SQL Server数据库中有一些示例数据,运行良好 假设我拥有所有必要的存储库和IOC,是否有一个工具可以从一组表中提取数据,并将其“冻结”到模拟对象中(可能使用XML文件存储数据),这样我就可以分离数据库并使用模拟数据进行单元测试了?我不知道有什么直接的方法可以满足您的要求,但是MSSQL支持导出到CSV、Access和Excel。尽管这需要您在中间层中更改数据访问层,而且我觉得这并不能回答您的问题: 将其“冻干”成模拟对象 这我不确定。仅在与新

我有一个现有的ASP.NET MVC应用程序,SQL Server数据库中有一些示例数据,运行良好


假设我拥有所有必要的存储库和IOC,是否有一个工具可以从一组表中提取数据,并将其“冻结”到模拟对象中(可能使用XML文件存储数据),这样我就可以分离数据库并使用模拟数据进行单元测试了?

我不知道有什么直接的方法可以满足您的要求,但是MSSQL支持导出到CSV、Access和Excel。尽管这需要您在中间层中更改数据访问层,而且我觉得这并不能回答您的问题:

将其“冻干”成模拟对象


这我不确定。仅在与新数据库相同的SQL server上或可能在开发人员SQL server上恢复数据库备份是否可行?

根据您要测试的具体内容,可能有不同的方法

如果您想测试数据访问逻辑,那么这不再是单元测试,而是集成测试。对于这类测试,最好能够轻松地用一些更轻的数据库(甚至可能是内存中的数据库,如SQLite)替换真实数据库,在运行每个测试之前,这些数据库将被重建。如果您使用的是ORM,则此任务很简单。您需要做的就是从现有数据库生成SQL脚本(插入到…),修改方言并使其适应SQLite(如果需要),读取并注入SQLite文件,最后剩下的就是指示数据访问层在单元测试中使用SQLite方言和连接字符串

现在,如果您不使用ORM,并且您的数据访问逻辑与MSSQL绑定,那么事情会变得更糟,您将需要一个实时数据库来执行这些集成测试。在本例中,我建议您通过只修改连接字符串来复制用于测试的真实数据库。您需要再次正确地
设置
拆卸
(最好在事务中)此测试数据库,以便将其置于测试的已知状态


如果您想测试依赖于这些存储库(例如控制器)的代码,您甚至不需要费心模拟数据,因为控制器依赖于抽象存储库而不是真正的实现(不是吗),因此,您可以轻松地模拟存储库的方法,以便测试控制器中的逻辑。

这实际上是一种众所周知的“测试气味”:

发件人: 2098937: