使用User.Identity Name作为Integer为单元测试单元测试

时间:2012-11-22 06:19:04

标签: asp.net-mvc unit-testing identity

我正在使用Web Api的ASP.NET MVC 3单元测试编写测试用例。

现在我有一个动作调用我在服务层中定义的一些方法,其中我使用了以下代码行。

var userId = ((Project)(User.Identity)).UserId;

Project类是

using System;
using System.Security.Principal;
using System.Web.Security;



namespace Project.Web.Core.Models
{ 
[Serializable]
public class ProjectUser : IIdentity
{
    public ProjectUser(){} 
    public int UserId { get; set; }
  }
}

现在我如何为此创建单元测试方法,我得到空引用异常。我是编写单元测试的新手 任何人都可以帮助我

1 个答案:

答案 0 :(得分:0)

与此问题类似:Testing controller Action that uses User.Identity.Name

在单元测试的上下文中,User.Identity对象不存在的HttpContext,它只存在于ASP.NET进程中运行的代码的上下文中。

如果将HttpContext作为参数传递给服务方法,可能会更容易编写单元测试。然后,您可以使用类似于this answer的代码来引用问题:

var mock = new Mock<UnknownServiceClass>();
var mockedUser = new ProjectUser(){ UserId = 1 };
mock.SetupGet(p => p.HttpContext.User).Returns(mockedUser);