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