单元测试MVC 3和实体框架
本文关键字:实体 框架 MVC 单元测试 | 更新日期: 2023-09-27 18:08:15
我正在学习微软在VS2010中内置的单元测试功能,并遇到了一个问题。
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void SomeTest()
{
//Arrange
HomeController controller = new HomeController();
//Act
ViewResult results = controller.Index() as ViewResult;
//Assert
ViewDataDictionary viewData = results.ViewData;
Assert.AreEqual(null, viewData["Message"]);
}
}
我知道这将返回失败,这不是问题。什么是一个问题,然而,我击中我的实体框架模型"myModel。并得到错误"System.ArgumentException: The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid."
在MyModel.Designer.cs文件中。这一行是:
public Tool_Entities() : base("name=Tool_Entities", "Tool_Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}
我知道这行是ok的,因为当我运行非测试项目时,我可以很好地连接到这个模型。
您应该以面向服务或存储库的方式从控制器中抽象出EF。这样你就可以为你的单元测试移除依赖(并注入mock),只测试你的控制器。
首先创建一个接口。这只是一个蓝图,你可以把它做成任何你想要的样子。
public interface IToolRepository
{
void Add(Tool something);
IQueryable<Tool> Query { get; }
void Delete(Tool something);
}