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的新手,因此我首先要问单元测试是否应该测试真实的数据库数据,如果这是一个好方法,如何做到这一点。
谢谢。
在我看来 - 你应该有一个模拟存储库/持久性层进行测试。通过这种方式 - 你可以有一个可预测的结果集来反对和编写测试。
这方面的一个例子可能是您的控制器接受存储库的实例,其代码如下:
public class BrandController{
public BrandController(IBrandRepository repository){...}
}
您可以使用任何 DI + 模拟框架注入 IBrandRepository 以进行单元测试
但是,在某些情况下,模拟是不够的,您确实需要一个物理数据库进行测试。
在这种情况下,我建议拥有一个具有相同结构的测试数据库,但可以根据单元测试的需要重新设定种子/初始化测试数据。
在这种情况下,您可以将配置文件指向测试数据库进行测试,并使用某种脚本或 DbInitializer 将数据库初始化回原始状态等。
呵呵。