Nunit, Asp.net MVC 4, Sql Server CE 4, error provider

本文关键字:CE error provider Server Sql net MVC Nunit Asp | 更新日期: 2023-09-27 18:32:41

  • 我创建了一个简单的 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 返回此错误:

滑板商店.测试.控制器.

品牌控制器测试.测试详细信息视图: System.Data.Provider不兼容异常:发生错误 从数据库中获取提供程序信息。这可能是由以下原因引起的 使用不正确的连接字符串的实体框架。检查内部 详细信息的例外情况,并确保连接字符串 正确。 ----> System.Data.Provider不兼容异常:The 提供程序未返回提供程序清单令牌字符串。 ----> System.Data.SqlClient.SqlException:与网络相关的或 建立与 的连接时发生特定于实例的错误 SQL Server。找不到服务器或无法访问服务器。验证 实例名称正确,并且 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的新手,因此我首先要问单元测试是否应该测试真实的数据库数据,如果这是一个好方法,如何做到这一点。

谢谢。

Nunit, Asp.net MVC 4, Sql Server CE 4, error provider

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

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

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

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

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

在这种情况下,我建议拥有一个具有相同结构的测试数据库,但可以根据单元测试的需要重新设定种子/初始化测试数据。

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

呵。