Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用HttpContext创建单元测试,以便在方法内部进行授权?_C#_Asp.net_Visual Studio_Unit Testing - Fatal编程技术网

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]
    );
代码来自