新しいユーザーの登録に使用されるコントローラーをテストしようとしています。
[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 を使用しています。メソッドのセットアップは正常に機能します。唯一の問題は、結果フィールドに固有のものにアクセスできないことです。これにより、結果フィールドを認識してアサート部分で使用できます。モデルが View("RegisterSuccess") を使用した場合、問題はないと思いますが、RedirectToAction に簡単にアクセスできないことがわかりました。私が使用しようとしているものとは異なる解決策がある場合は、喜んで試してみたいと思います。