Moq TestMethod C # ASP.NET MVC - PullRequest
       7

Moq TestMethod C # ASP.NET MVC

0 голосов
/ 11 января 2019

Я учусь писать модульный тест по moq, и этот тест просто не удался с

Сообщение: метод теста UnitTests.AdminTests.IndexContainPlayerList threw исключение: 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());
    }

почему не удалось выполнить тест, может я что-то потерял или не понял?

1 Ответ

0 голосов
/ 11 января 2019

A NullReferenceException брошено, потому что вы передаете null в ваш AdminController, который я предполагаю, для вашего ITeamsRepository.

Как вы можете видеть, вы пытаетесь получить доступ к teamRepository, так как он равен нулю, выдается NullReferenceException.

Вам также нужно смоделировать эту зависимость.
Пример:

Mock<ITeamsRepository> teamsMock = new Mock<ITeamsRepository>();
AdminController target = new AdminController(mock.Object, teamsMock.Object);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...