Request.GetOwinContext()。getManager <applicationusermanager>在单元测试帐户控制器web api时返回null

时间:2015-05-04 10:44:48

标签: unit-testing asp.net-web-api usermanager

我正在尝试为我的帐户控制器web apis编写一些单元测试,这些测试使用了UserManager,但我在以下部分的标题中继续接收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是: (下面的这一行&#34; var user ...&#34;是问题开始的地方。它调用此问题标题中的行)

[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",

                };
            }

有人能指出我正确的方向吗?

0 个答案:

没有答案
相关问题