测试Windows认证的Action方法

时间:2016-01-19 09:40:40

标签: c# asp.net-mvc entity-framework unit-testing

我正在为动作方法编写单元测试,并在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的值,以便测试不会抛出任何错误。

2 个答案:

答案 0 :(得分:0)

确保您拥有< entityFramework ...>来自测试项目的app.config文件中的web.config的部分。

答案 1 :(得分:0)

看到您的问题已经得到解答,我只想提出一些建议 - 您几乎不应该尝试测试您的行为。这是不好的实践 - 很难实现(你应该考虑的所有嘲弄)并且带来的价值很小。在服务/帮助程序中拥有您的业务逻辑并测试它们。所以在你的情况下我宁愿:

var user = UserService.GetUserByName(User.Identity.Name);

然后我将对该服务方法进行单元测试。