我正在开发一个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");
}
答案 0 :(得分:1)
这可能不是您实际问题的答案/解决方案,但一般来说是一个很好的提示。
我强烈建议不要在每个单元测试中点击DB,这同样适用于文件系统和其他慢速IO操作。
使用像Repository Pattern这样的简单模式来抽象数据访问。然后,您可以实现虚假存储库(即由List<T>
支持)或使用类似moq的模拟框架来设置模拟存储库。
通过这样做,您的测试将完全在内存中运行,从而运行得更快。您也不需要关心连接字符串,并且始终可以访问数据库。
答案 1 :(得分:-1)
单元测试,使用时不要点击数据库。您使用像Moq或RhinoMocks这样的模拟框架。如果您想要访问数据库,则调用集成测试。
集成测试非常耗时,因此大量的这些测试无法在自动化的夜晚运行,但其中一小部分很好。
根据我上面看到的代码,如果遇到问题,我会使用控制台应用程序或linqpad进行测试,否则TestMethod将及时进行故障排除。