【问题标题】:Creating Database Mocks in ASP.NET MVC using Data from Existing Database使用现有数据库中的数据在 ASP.NET MVC 中创建数据库模拟
【发布时间】:2011-03-06 21:55:36
【问题描述】:

我有一个现有的 ASP.NET MVC 应用程序,其中包含 SQL Server 数据库中的一些示例数据,它工作正常..

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

【问题讨论】:

    标签: c# asp.net-mvc linq-to-sql sql-server-2008 asp.net-mvc-2


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        我不知道执行您要求的直接方法,但 MSSQL 支持导出到 CSV、Access 和 Excel。虽然,这需要您更改中间层中的数据访问层,此外,我认为这并不能回答您的问题:

        “冻干”成一个模拟对象

        这个我不确定。是否可以仅在与新数据库相同的 SQL 服务器上或可能在开发 SQL 服务器上恢复数据库的备份?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-09
          • 1970-01-01
          • 2019-07-13
          • 1970-01-01
          • 1970-01-01
          • 2015-04-22
          • 1970-01-01
          • 2019-09-29
          相关资源
          最近更新 更多