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