C# 如何使用HttpContext创建单元测试,以便在方法内部进行授权?
这是我的密码:C# 如何使用HttpContext创建单元测试,以便在方法内部进行授权?,c#,asp.net,visual-studio,unit-testing,C#,Asp.net,Visual Studio,Unit Testing,这是我的密码: public static ApiResponseBase BookActivity(ActivityBookApiRequest request) { var user = HttpContext.Current.User; if (string.IsNullOrEmpty(user.Identity.Name)) { return new ActivityB
public static ApiResponseBase BookActivity(ActivityBookApiRequest request)
{
var user = HttpContext.Current.User;
if (string.IsNullOrEmpty(user.Identity.Name))
{
return new ActivityBookApiResponse
{
StatusCode = HttpStatusCode.Unauthorized,
ErrorCode = "ERAGPR01"
};
}
return null;
}
如何为该代码创建单元测试
我是通过单元测试创建的,但仍然失败,因为在HttpContext.Current.User上出现了给定错误:
System.NullReferenceException:对象引用未设置为实例
指一个物体
下面是我的单元测试:
[TestMethod]
public void Book_Null_ReturnBadRequest()
{
var expectedResult = new ActivityBookApiResponse
{
StatusCode = HttpStatusCode.Unauthorized,
ErrorCode = "ERAGPR01"
};
var actualResult = ActivityLogic.BookActivity(null);
Assert.AreEqual(expectedResult.StatusCode, actualResult.StatusCode);
Assert.AreEqual(expectedResult.StatusCode, actualResult.StatusCode);
}
HttpContext.Current
是静态的,可以分配:
HttpContext.Current = new HttpContext(
new HttpRequest("", "http://tempuri.org", ""),
new HttpResponse(new StringWriter())
);
// User is logged in
HttpContext.Current.User = new GenericPrincipal(
new GenericIdentity("username"),
new string[0]
);
// User is logged out
HttpContext.Current.User = new GenericPrincipal(
new GenericIdentity(String.Empty),
new string[0]
);
代码来自