Moq 测试方法 C#ASP.NET MVC

Moq TestMethod C#ASP.NET MVC

我学习通过 moq 编写模块测试,这个简单的测试失败了

Message: Test method UnitTests.AdminTests.IndexContainPlayerList threw exception: System.NullReferenceException:

[TestMethod]
    public void IndexContainPlayerList()
    {
        //Arrange
        Mock<IPlayerRepository> mock = new Mock<IPlayerRepository>();
        mock.Setup(m => m.Players).Returns(new List<Player>() {
            new Player () { Id = 1, Name = "Karye", Surname = "Irving", Team = new Team(){ Id = 1, Name = "Boston Celtics" }, TeamId = 1 },
            new Player () { Id = 1, Name = "Stephan", Surname = "Carry", Team = new Team(){ Id = 2, Name = "Golden State Warriors" }, TeamId = 2 }
        });

        AdminController target = new AdminController(mock.Object, null);

        //Action
        Player[] resultList = ((IEnumerable<Player>)target.Index().ViewData.Model).ToArray();

        //Assert
        Assert.AreEqual(resultList.Length, 2);
    }

我正在测试的方法

 public ViewResult Index()
    {
        ViewBag.ChoosingTeam = new SelectList(teamRepository.Teams, "Name ", "Name");
        return View(playerRepository.Players.ToList());
    }

为什么测试 运行 失败,可能是我丢失了一些东西或不明白?

A NullReferenceException 被抛出是因为你将 null 传递到你的 AdminController 中,我 假设 是给你的 ITeamsRepository.

如您所见,您正在尝试访问 teamRepository,因为它为 null,因此抛出 NullReferenceException

您还需要模拟该依赖项。
示例:

Mock<ITeamsRepository> teamsMock = new Mock<ITeamsRepository>();
AdminController target = new AdminController(mock.Object, teamsMock.Object);