5

I am trying to write some unit tests for my account controller web apis which make use of UserManager but I keep receiving null on the line in the title in the following section:

public ApplicationUserManager UserManager
        {
            get
            {
                return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
            }
            private set
            {
                _userManager = value;
            }
        }

I have tried so many different ways to fix this as I have read that I need to Mock some of the parts of ApplicationUser but have not managed to get any of them to fix my problem. Below is some of the code I have implemented following a tutorial to unit test:

public interface IStoreAppContext : IDisposable
    {
        //IDbSet<User> Users { get; }
        DbSet<User> u { get; }
        DbSet<SportProgram> SportContext { get; set; }
        int SaveChanges();
        void MarkAsModified(User item);
    }
}

The api I am trying to unit test in my account controller is: (This line below "var user..." is where the problem starts. it calls the line in the title of this question)

[Route("userProfile/{username}")]
        public IHttpActionResult getUserProfile(String username)
        {
            var user = UserManager.FindByName(username);
            if (user != null)
            {
                db2.MarkAsModified(user);
                return Ok(user);
            }
            else
            {
                return NotFound();
            }

        }

Then in my TestProject I have the following context class:

 class TestStoreAppContext : IStoreAppContext
    {
        public TestStoreAppContext()
        {
            this.u = new TestProductDbSet();
        }

        public DbSet<User> u { get; set; }

        public DbSet<SportProgram> SportContext { get; set; }

        public int SaveChanges()
        {
            return 0;
        }

        public void MarkAsModified(User item) { }
        public void Dispose() { }
    }
}

Finally in my test controller where i test the api:

[TestMethod()]
        public void getUserProfileTest()
        {
            var context = new TestStoreAppContext();
            context.u.Add(GetDemoProduct());
            var controller = new AccountController(context);
            var result = controller.getUserProfile("john") as OkNegotiatedContentResult<User>;
            Assert.AreEqual("john", result.Content.UserName);
        }

The GetDemoProduct called above:

  User GetDemoProduct()
            {
                return new User()
                {
                    Id = "3",
                    UserName = "john",
                    Password = "Password-1",

                };
            }

Can anyone point me in the right direction please?

CH15
  • 53
  • 1
  • 6

0 Answers0