【问题标题】:Nunit, Asp.net MVC 4, Sql Server CE 4, error providerNunit、Asp.net MVC 4、Sql Server CE 4、错误提供程序
【发布时间】:2012-04-28 00:01:46
【问题描述】:
  • 我创建了一个简单的 Asp.net MVC 4 应用程序
  • 我使用 visula studio 2010 扩展创建了 NUnit 测试项目
  • 我添加了几个控制器(带有模型和视图),网站运行良好。它适用于 Sql Server CE

现在我需要测试一个控制器。我写了这个简单的类:

namespace SkateboardShop.Tests.Controllers
{
    [TestFixture]
    class BrandControllerTest
    {

        [Test]
        public void TestDetailsView()
        {

            var controller = new BrandController();
            var result = controller.Details(2) as ViewResult;
            Assert.AreEqual("Details", result.ViewName);

        }

    }
}

当我运行这个测试时,NUnit 会返回这个错误:

SkateboardShop.Tests.Controllers.BrandControllerTest.TestDetailsView: System.Data.ProviderIncompatibleException:发生错误时 从数据库中获取提供者信息。这可能是由于 实体框架使用了不正确的连接字符串。检查内部 有关详细信息的例外情况,并确保连接字符串是 正确的。 ----> System.Data.ProviderIncompatibleException : provider 未返回 ProviderManifestToken 字符串。 ----> System.Data.SqlClient.SqlException : 网络相关或 建立连接时发生特定于实例的错误 SQL 服务器。服务器未找到或无法访问。核实 实例名称正确且 SQL Server 配置为 允许远程连接。 (提供者:SQL 网络接口,错误:26 - 定位服务器/指定实例时出错)

当然,测试项目从哪里获取数据提供者信息? 我将这样的连接字符串添加到 app.config 文件(测试项目的)中:

<connectionStrings>
    <add name="SkateboardEntities" connectionString="Data Source=d:\Basic\project\asp\SkateboardShop\SkateboardShop\App_Data\SkateboardShop.sdf" providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>

但无事可做。 由于我是 MVC 和 NUnit 的新手,所以我首先要问的是,单元测试是否应该测试真实的数据库数据,如果这是一个好方法,该怎么做。

谢谢。

【问题讨论】:

  • 这些是集成测试吗?如果是这样,那么您的测试项目是否包含类似于您的 asp.net 应用程序的配置文件?如果它不是一个集成测试,那么你没有为你的持久层注入依赖。

标签: c# unit-testing nunit sql-server-ce asp.net-mvc-4


【解决方案1】:

在我看来 - 你应该有一个模拟存储库/持久层进行测试。 通过这种方式 - 您可以拥有一个可预测的结果集来处理和编写测试。

这方面的一个例子可能是您的控制器接受具有如下代码的存储库实例:

public class BrandController{
 public BrandController(IBrandRepository repository){...}
}

您可以使用任何 DI + Mock 框架来注入 IBrandRepository 进行单元测试

但是,在某些情况下,模拟是不够的,您确实需要一个物理数据库来进行测试。

在这种情况下,我建议使用具有相同结构的测试数据库,但测试数据可以根据单元测试的需要重新植入/初始化。

在这种情况下,您可以将配置文件指向测试数据库进行测试,并使用某种脚本或 DbInitializer 将数据库初始化回原始状态等。

HTH。

【讨论】:

  • 如果有人需要它的示例,我在这里找到了一个项目,可以查看如何重构应用程序:efmvc.codeplex.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多