Исключение Moq: проверка вызова метода, который принимает параметры - PullRequest
2 голосов
/ 25 июня 2010

Я хочу проверить, что вызывается метод "Create" в _eventManager в моем контроллере.Когда я запускаю свой тест, я получаю следующее исключение:

Метод теста Baigent.TheDoNation.Application.Tests.EventControllerTest.Create_Post_IfModelIsValidRedirectToSuccessfullyCreatedViewOccurs сгенерировал исключение: System.ArgumentException a: недопустимый параметр: - недопустимый параметр: недопустимый: недопустимый: on-overd: исключение: недопустимый для on-on: недопустимый: on-overd: исключение: недопустимый для on-on: недопустимый: on-overd: исключение: недопустимый: on = overidm.CreateEvent (It.IsAny (), It.IsAny ()).

Код для контроллера:

    public ActionResult Create(Event eventObject, FormCollection collection)
    {
        if (ModelState.IsValid)
        {
            _eventManager.CreateEvent(eventObject, User.Identity.Name);

            return RedirectToAction("SuccessfullyCreated", new { });
        }

        // Invalid - redisplay form with errors
        return View(GetEventViewModel(eventObject));
    }

Поле _eventManager устанавливается в конструкторе.Мой тест:

        var eventManagerMock = new Mock<EventManager>(new FakeEventsRepository());
        eventManagerMock.Setup(m => m.CreateEvent(It.IsAny<Event>(), It.IsAny<String>())).Verifiable("No call to CreateEvent on the EventManager was made");

        var eventController = new EventController(eventManagerMock.Object);

        var newEvent = new Event {Name = "Test Event", Date = DateTime.Now, Description = "Test description"};

        // Act
        var result = eventController.Create(newEvent, new FormCollection()) as RedirectToRouteResult;

        // Assert
        eventManagerMock.Verify(m => m.CreateEvent(It.IsAny<Event>(), It.IsAny<String>())); 

        Assert.IsNotNull(result, "RedirectToRouteResult should be returned");
        Assert.AreEqual("SuccessfullyCreated", result.RouteValues["action"], "Redirect should be to SuccessfullyCreated view");

Пожалуйста, помогите!

Ответы [ 3 ]

1 голос
/ 25 июня 2010

Исключение говорит вам, что вы пытаетесь переопределить не-виртуальный член , что невозможно.

Moq (а также Rhino Mocks и NMock) могут переопределять только виртуальные элементы(включая чистые члены интерфейса).

См. здесь для более подробного объяснения .

0 голосов
/ 25 июня 2010

Вам придется либо создать метод Virtual, либо вам нужно определить интерфейс с методом CreateEvent (), а затем смоделировать интерфейс:]

Теперь вы хотите смоделировать метод, в котором Moqне имеет прямых прав переопределять его.

0 голосов
/ 25 июня 2010

Moq может только издеваться над виртуальными членами вашего типа EventManager.Вам следует рассмотреть возможность извлечения интерфейса IEventManager или сделать метод CreateEvent виртуальным.

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