我正在使用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; }
}
}
现在我如何为此创建单元测试方法,我得到空引用异常。我是编写单元测试的新手 任何人都可以帮助我
答案 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);