我正在尝试测试用于注册新用户的控制器。
[HttpPost]
public ActionResult Register(ClientViewModel clientViewModel)
{
if (ModelState.IsValid)
{
var client = new Client
{
//filling object from clientViewModel
};
var license = new License
{
//filling object from clientViewModel
};
if (AccountFacade.AddClientLicense(client, license))
{
var licenseId = AccountFacade.GetLicenseIdForUsername(Applications.UBetPro, clientViewModel.UserName);
if (licenseId.HasValue)
{
AccountFacade.AddAccount(licenseId.Value);
return RedirectToAction("RegisterSuccess");
}
}
}
return View(clientViewModel);
}
这不是整个代码,但我认为它是与测试相关的唯一部分。添加和验证的方法是从业务逻辑中的外观调用的,该外观在单元测试中与其所有方法一起被模拟。控制器应该将用户重定向到注册成功时显示的表单,这就是我要测试的东西。这是我的单元测试:
public void Register_WithUniqueUsernameAndEmail_ReturnsRegistrationSuccessful()
{
// Arrange:
var mock = new Mock<IAccountFacade>();
mock.Setup(/*mocking methods*/);
var controller = new AccountController(mock.Object);
var context = new ControllerContext();
var fakeClientViewModel = new ClientViewModel
{
FirstName = "test",
...
...
};
// Act:
var result = controller.Register(fakeClientViewModel);
// how do I get the name of result or something similar?
// Assert: ???
}
我正在使用 Moq 和 Structure Map 进行单元测试。方法设置工作正常,唯一的问题是我无法访问特定于结果字段的内容,我可以通过这些内容识别它并在 Assert 部分中使用它。如果模型使用 View("RegisterSuccess") 我想不会有任何问题,但据我所知, RedirectToAction 并不那么容易访问。如果有与我尝试使用的解决方案不同的解决方案,我很乐意尝试一下。