【发布时间】:2011-03-08 05:01:46
【问题描述】:
我想测试我的控制器中 _eventManager 上的“创建”方法是否被调用。当我运行测试时,出现以下异常:
测试方法 Baigent.TheDoNation.Application.Tests.EventControllerTest.Create_Post_IfModelIsValidRedirectToSuccessfullyCreatedViewOccurs 抛出异常:System.ArgumentException:不可覆盖成员上的无效设置: m => m.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");
请帮忙!
【问题讨论】:
标签: asp.net-mvc unit-testing testing moq