Как мои контроллеры ASP.NET MVC должны знать о репозитории

Я пытаюсь понять, как можно выполнить модульное тестирование проекта ASP.NET MVC, который получает доступ к данным через какой-то репозиторий.

Во время модульных тестов я, очевидно, хотел бы создать фиктивный репозиторий, но как передать этот фиктивный репозиторий тестируемому экземпляру контроллера? Каким образом реальный репозиторий, который действительно подключен к базе данных, попадет в контроллер?

Я просто делаю это через конструкторы, как я? показано ниже? Я думаю, что именно так я должен настраивать свои контроллеры, но я хотел бы получить подтверждение, что это правильно:

public class SampleController : Controller
{
    private IRepository _repo;

    //Default constructor uses a real repository
    // new ConcreteRepo() could also be replaced by some static 
    // GetRepository() method somewhere so it would be easy to modify
    //which concrete IRepository is being used
    public SampleController():this(new ConcreteRepo())
    {

    }

    //Unit tests pass in mock repository here
    public SampleController(IRepository repo)
    {
        _repo = repo;
    }
}
5
задан Cœur 5 March 2019 в 16:35
поделиться