オブジェクトを取り込んでデータベースに保存するメソッドがあります。しかし、オブジェクトを保存する前に、次のことを行います...
(疑似コード)
if (IsAuthenticated)
{
foo.UserId = AuthenticatedUser.Id;
}
else
{
foo.AnonEmail = "Jon@World-Domination";
foo.AnonName = "Jon Skeet";
}
try
{
_fooService.Save(foo);
}
catch
{
// Some view, with error stuff now added to
return View(...); ViewData.ModelState.
}
// all good, redirect to the proper next view.
return RedirectToAction(...);
そのコードは正常に動作しますが、2 つの単体テストを成功させる方法がわかりません。a) ユーザーは有効なデータで認証されます b) ユーザーは有効なデータで認証されません。
何をすべきかわからない理由は、両方のシナリオが同じ RedirectToAction(..) ビュー オブジェクトを返すためです。だから私はそれをうまくテストできます..しかし、保存されたオブジェクトに認証されたユーザーIDまたは匿名情報が含まれているかどうかはわかりません。最初の単体テストで言いたいことのようです
- 認証済みユーザーを moq アップする
- 呼び出し方法
- 結果が RedirectToActionView かどうかをテストします
- 永続化された foo オブジェクトに moq されたユーザー ID が含まれているかどうかをテストします。
考え?
アップデート
一般的な提案は、fooService をモックすることです。私は現在 Dependency Injection と Moq を使用しています。ここでDIがどのように重要かはわかりませんが、???