Как смоделировать базовый контроллер в asp.net mvc? - PullRequest
3 голосов
/ 05 октября 2009

У меня есть базовый контроллер, который я сделал, чтобы я мог легко передавать данные в представление главной страницы. Однако этому базовому контроллеру передается сервисный уровень, и все время, когда я запускаю свои модульные тесты, этот сервисный уровень убивает его, так как он пытается получить доступ к некоторому материалу базы данных.

  private ServiceLayer service;

        public ApplicationController():this(new ServiceLayer())
        {
        }

        public PlannerApplicationController(IServiceLayer serviceS)
        {
            service= serviceS;           
        }

        protected override void Initialize(RequestContext requestContext)
        {

            base.Initialize(requestContext);
          // some stuff gets called here.
        }

Первое, что сервисный уровень называет

   public ServiceLayer ()
            : this(new Repository())
        {

        }

// есть другой конструктор для DI.

Таким образом, когда я запускаю свои тесты, и он переходит к моему контроллеру, который наследует этот базовый контроллер, когда он попадает в конструктор моих контроллеров, он, похоже, вызывает этот базовый контроллер.

Итак, в своих модульных тестах я попытался смоделировать базовый контроллер, выполнив что-то вроде этого

baseController = новый ApplicationController (SerivceLayerInterface);

Я использовал moq и прочее, чтобы смоделировать хранилище в интерфейсе serviceLayer, но, похоже, это не дает никакого эффекта.

Так что не уверен, что делать.

1 Ответ

3 голосов
/ 05 октября 2009

Вместо того, чтобы макетировать свой базовый контроллер, почему бы вам не смоделировать интерфейс уровня обслуживания. Например, используя MoQ, вы можете сделать это:

var serviceMock = new Mock<IServiceLayer>();
//serviceMock.Setup(s => s.SomeMethodCall()).Returns(someObject);
var controller = new BaseController(serviceMock.Object);

Общая идея заключается в том, что если вы тестируете свой контроллер, вы хотите смоделировать его зависимости. Вы хотите избежать насмешек над тем, что вы тестируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...