所以我试图测试这个方法将返回“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,它是我需要模拟的Application控制器中的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);
}
答案 0 :(得分:2)
我认为你的问题是你的控制器类实例中内置了太多功能,这使得测试更加困难。
测试时,您要确保所有不属于被测系统(SUT)的位都可以操作。这允许您调整所有其他位以产生场景。
如果用户想要独立于控制器进行调整,您有两种选择:
这些将使您能够在测试中使用对象。通常当你遇到这样的问题时,事情有点难以测试它是一个很好的指标,你没有正确地模块化你。