0
所以我想测试,其中此方法将返回“ManagerEventsIndex”的情况下,控制器:如何嘲笑实现接口
public ActionResult Index()
{
if (this.CurrentUser != null)
{
if (this.CurrentUser.Role.Name == AvailableRoles.GameManager)
{
var model = new GameManagerEventsIndexModel();
model.NumLocationsOfCurrentUser = this._customerLocationDataProvider.GetAllForUserId(CurrentUser.Id)
.Where(x => x.Active == true)
.Count();
return View("ManagerEventsIndex", model);
}
else
{
return View();
}
}
else
return View("PublicIndex");
}
但这种控制器实现另一个控制器的ApplicationController像这样:EventsController: ApplicationController,它是应用程序控制器中的CurrentUser对象,我需要模拟才能测试此...此处为我的测试方法。谢谢。
[TestMethod]
public void AssertGameManagerRoleReturnsGameManagerIndex()
{
// Arrange
//eventsController = new EventsController(eventDataProvider.Object, playerEventDataProvider.Object, userDataProvider.Object,
tokenAuthent.Object, dataContext.Object, customerLocationDataProvider.Object);
var user = new Mock<User>();
var role = new Mock<Role>();
role.SetupSet(x => x.Name = "Ted");
user.SetupSet(x => x.Role = role.Object);
//?? var appController = new Mock<ApplicationController>();
//?? appController.SetupSet(x => x.User = user);
// var mController = new Mock<EventsController>();
// Act
var result = (ViewResult) eventsController.Index();
// Assert
Assert.AreEqual("ManagerEventsIndex", result.ViewName);
}
嗯所以有没有办法让模拟控制器,同时指定它应该实现的模拟接口? – 1Canuck16
@mapleafman我不认为moq支持那样的东西。你可以模拟整个界面或整个实例(不要将它们连接在一起)。我想我的观点是,如果你觉得你在测试中需要做一些疯狂的事情来产生一个场景,它通常会产生一种代码异味,暗示你可能没有以正确的方式破坏实际的SUT –
谢谢我感谢,我同意,只是与其他人一起工作,这主要是他们的设计,只是试图看看是否有什么可以做的,谢谢 – 1Canuck16