【问题标题】:unit test user.identity.getuserid asp.net mvc单元测试 user.identity.getuserid asp.net mvc
【发布时间】:2014-11-17 11:42:19
【问题描述】:

我有一个控制器,我在其中对我的索引操作进行单元测试。我在单元测试 User.Identity.GetUserId() 时遇到问题

This is my controller

public ActionResult Index()
{
   string userId = User.Identity.GetUserId();

   DemoModel demoModel = _demoModelService.GetByUserId(userId);
   MyModel myModel = new MyModel()
      {
            Name = demoModel.Name;
            Description = demoModel.Description;
      }

   return View(myModel);
}



This is my Unit Test:

public void Test_Index_Action()
    {
        //Act
        var result = controller.Index() as ViewResult;

        //Assert
        Assert.AreEqual("", result.ViewName);
    }

当我调试我的测试方法时,当它到达我的 Index 操作的第一行代码 (User.Identity.GetUserId) 时,它会生成 null UserId。如何在单元测试此代码时访问 userId?

【问题讨论】:

  • 你应该使用最小起订量来模拟单元测试用例的会话。 stackoverflow.com/questions/22762338/…
  • 我试过你提供的链接..它给出了错误-
  • system.notsupportedexception:expression 引用了不属于模拟对象 x=>x.GetUserId @Prashant 的方法
  • 你添加 Moq.dll 了吗?
  • 是的..我已经添加了它

标签: asp.net-mvc unit-testing


【解决方案1】:

我一直在为自己的 mvc 单元测试而苦苦挣扎,虽然有已知的技术可以提高 mvc 应用程序的可测试性,但遗憾的是,我从事的大多数项目都没有遵循它们。 所以我决定开始这个项目来帮助我和其他喜欢对他们的 mvc 应用程序进行单元测试的人。请看:https://github.com/ibrahimbensalah/Xania.AspNet.Simulator

这是一个示例单元测试类

using System.Web.Mvc;
using NUnit.Framework;
using Xania.AspNet.Simulator;

public class SimulatorTests
{

    [Test]
    public void ActionExecuteTest()
    {
        // arange
        var controller = new TestController();

        // act
        var result = controller.Execute(c => c.Index());

        // assert
        Assert.AreEqual("Hello Simulator!", result.ViewBag.Title);
    }

    [Test]
    public void UnAuthorizedActionTest()
    {
        // arrange 
        var controller = new TestController();

        // act 
        var result = controller.Execute(c => c.UserProfile());

        // assert
        Assert.IsInstanceOf<HttpUnauthorizedResult>(result.ActionResult);
    }


    [Test]
    public void AuthorizedActionTest()
    {
        // arrange 
        var controller = new TestController();

        // act 
        var result = controller.Action(c => c.UserProfile()).Authenticate("user", null).Execute();

        // assert
        Assert.IsInstanceOf<ViewResult>(result.ActionResult);
    }
}

public class TestController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Title = "Hello Simulator!";
        return View();
    }

    [Authorize]
    public ActionResult UserProfile()
    {
        return View();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多