Я пытаюсь смоделировать ASP.NET MVC2 Controller
, используя Moq , но я получаю ошибку, потому что я пытаюсь смоделировать не перезаписываемое свойство .Как мне это сделать, пожалуйста?
ПРИМЕЧАНИЕ: контроллер, который я пытаюсь смоделировать, - это (abstract
) ASP.NET MVC2 Controller
... не пользовательский контроллер.Зачем?Я пытаюсь проверить некоторые пользовательские расширения контроллера , которые я сделал.На самом деле у меня нет собственного класса контроллера.
Код:
// My own test helper magic shiz.
httpContextBaseMock = MockHelpers.GetAnHttpContextBaseMock();
controllerContextMock = new Mock<ControllerContext>();
controllerContextMock.Setup(x => x.HttpContext)
.Returns(httpContextBaseMock.Object);
controllerMock = new Mock<Controller>();
controllerMock.SetupGet(x => x.RouteData)
.Returns(RestMockHelpers.MockRouteData().Object);
Эта последняя строка завершается ошибкой с ...
System.ArgumentException: Invalidнастройка на не перезаписываемый элемент: x => x.RouteData
Итак, я подумал, что мне не следует насмехаться над controllerContext
, а просто создать его экземпляр ... REA_ANDREW сделал в своем SO вопросе ...
var controllerContext = new ControllerContext(_httpContextBaseMock.Object,
new RouteData(), new Mock<ControllerBase>().Object);
var controller = new Controller(); <-- Cannot do this.
Controller class is abstract.
Так что я не уверен, нужно ли мне создавать свой собственный класс поддельных контроллеров, в какой-нибудь вспомогательной утилите тестирования, которая ничего не делает,но просто наследуется от Controller
.Затем создайте его экземпляр.
Но я чувствую, что все это должно быть сделано с использованием макетов, вместо того, чтобы начинать с некоторых, а затем делать несколько экземпляров ...
Я так растерялся: (
Обновление:
Меня попросили объяснить, какой код я пытаюсь протестировать. У меня есть собственный ViewResult, который я сделал, и конструктор установил свойство одной строки.Я просто проверяю, установлено ли свойство.
// Act.
var myResult = new MyResult(controllerMock.Object);
// Assert.
Assert.NotNull(myResult);
Assert.AreEqual("controllerName", myResult.ControllerName);