1

This is my codes :

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;
        }

How to create unit test for that code?

I was created unit test, but still failed because on HttpContext.Current.User given error :

System.NullReferenceException: Object reference not set to an instance of an object.

Here's my unit test :

        [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);
        }
Marjan M
  • 39
  • 7

1 Answers1

1

HttpContext.Current is static and can be assigned:

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]
    );

Code from Mock HttpContext.Current in Test Init Method

shturm
  • 815
  • 7
  • 18