5

我正在尝试为使用 UserManager 的帐户控制器 Web api 编写一些单元测试,但我在下一节的标题行中不断收到 null:

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

我已经尝试了很多不同的方法来解决这个问题,因为我读到我需要模拟 ApplicationUser 的某些部分,但没有设法让它们中的任何一个来解决我的问题。下面是我按照单元测试教程实现的一些代码:

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

我试图在我的帐户控制器中进行单元测试的 api 是:(“var user ...”下面的这一行是问题开始的地方。它调用了这个问题标题中的行)

[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();
            }

        }

然后在我的 TestProject 中,我有以下上下文类:

 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() { }
    }
}

最后在我测试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);
        }

上面调用的 GetDemoProduct:

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

                };
            }

谁能指出我正确的方向?

4

0 回答 0