在单元测试中连接到数据库时出错

时间:2013-06-07 12:25:17

标签: asp.net-mvc-3 unit-testing

我正在开发一个ASP.NET MVC应用程序。该应用程序运行完美。我可以查看,添加,更新和删除记录,但是当我运行单元测试时,它会在每个测试方法上显示错误。

错误是:

  

底层提供程序在Open上失败。

错误详情:

  

{“连接超时已到期。尝试使用登录前握手确认时超时时间已过。这可能是因为登录前握手失败或服务器无法及时响应。连接到此服务器的是 - [Pre-Login] initialization = 21013; handshake = 0;“}

有什么问题?

单元测试代码

[TestMethod]
public void Test_Company_GetCompanyType()
{
    controllerBuilder.Session["loggedEmpId"] = 6;
    companyId = 66;

    //Case 1 : Does  Company have Type or not ?
    JsonResult actualCompanyType = oCompanyController.GetCompanyType(companyId) as JsonResult;          
    var result = actualCompanyType.Data;           
    Assert.IsNull(result,"Company have types");        
}

2 个答案:

答案 0 :(得分:1)

这可能不是您实际问题的答案/解决方案,但一般来说是一个很好的提示。

我强烈建议不要在每个单元测试中点击DB,这同样适用于文件系统和其他慢速IO操作。
使用像Repository Pattern这样的简单模式来抽象数据访问。然后,您可以实现虚假存储库(即由List<T>支持)或使用类似moq的模拟框架来设置模拟存储库。

通过这样做,您的测试将完全在内存中运行,从而运行得更快。您也不需要关心连接字符串,并且始终可以访问数据库。

答案 1 :(得分:-1)

单元测试,使用时不要点击数据库。您使用像Moq或RhinoMocks这样的模拟框架。如果您想要访问数据库,则调用集成测试。

集成测试非常耗时,因此大量的这些测试无法在自动化的夜晚运行,但其中一小部分很好。

根据我上面看到的代码,如果遇到问题,我会使用控制台应用程序或linqpad进行测试,否则TestMethod将及时进行故障排除。