我正在为动作方法编写单元测试,并在Action方法中获得以下错误。
发生了'System.InvalidOperationException'类型的异常 EntityFramework.dll但未在用户代码中处理
其他信息:找不到实体框架提供商 具有不变名称'System.Data.SqlClient'的ADO.NET提供程序。使 确保提供商在“entityFramework”部分注册 应用程序配置文件。
方式
public ActionResult Index()
{
var user = db.UserRight.FirstOrDefault(x => x.UserCode == User.Identity.Name);
ViewBag.UserName = user.UserName;
return View("Index");
}
测试方法
[TestMethod]
public void Home()
{
var controller = new HomeController();
var result = controller.Index() as ViewResult;
Assert.AreEqual("Index", result.ViewName);
}
如何从测试方法传递user的值,以便测试不会抛出任何错误。
答案 0 :(得分:0)
确保您拥有< entityFramework ...>来自测试项目的app.config文件中的web.config的部分。
答案 1 :(得分:0)
看到您的问题已经得到解答,我只想提出一些建议 - 您几乎不应该尝试测试您的行为。这是不好的实践 - 很难实现(你应该考虑的所有嘲弄)并且带来的价值很小。在服务/帮助程序中拥有您的业务逻辑并测试它们。所以在你的情况下我宁愿:
var user = UserService.GetUserByName(User.Identity.Name);
然后我将对该服务方法进行单元测试。