私はこのコントローラメソッドを単体テストしようとしています。このコントローラメソッドは、現在のMVCプロジェクトでそのまま使用できます。MVC5のConfirmEmailAsyncと他のUserManagerメソッドをモックするためのインタフェース
[AllowAnonymous]
public async Task<ActionResult> ConfirmEmail(string userId, string code)
{
if (userId == null || code == null)
{
return View("Error");
}
var result = await UserManager.ConfirmEmailAsync(userId, code);
return View(result.Succeeded ? "ConfirmEmail" : "Error");
}
AccountControllerをパラメータとしてApplicationUserManagerとApplicationSignInManagerを取るコンストラクタを有し、プライベートセッターとのマッチング特性は、試験のために使用します。しかし、私はConfirmEmailAsyncメソッドを模擬する方法を理解できません。
あなたはアイデンティティの名前空間でさまざまなインターフェイス模擬することができます
var store = new Mock<IUserStore<ApplicationUser>>();
store.As<IUserEmailStore<ApplicationUser>>()
.Setup(x => x.FindByIdAsync("username1"))
.ReturnsAsync((ApplicationUser)null);
var mockManager = new ApplicationUserManager(store.Object);
AccountController ac = new AccountController(mockManager, null, GetMockRepository().Object, GetMockLogger().Object);
をしかし、私はConfirmEmailAsyncのモックを作成するために必要があるインターフェイスを見つけるか把握することはできません。
どうすればよいですか?参考までに、これらのメソッドが偽装してテストするためにどのインタフェースが使用されているかを調べる良い方法はありますか?
私は単体テストを容易にし、他のプロジェクトで抽象化を再利用できるように、アイデンティティの機能の大部分を独自のプロジェクトに抽象化してこの問題を回避しました。私はこの記事http://timschreiber.com/2015/01/14/persistence-ignorant-asp-net-identity-with-patterns-part-1/から始め、自分のニーズに合わせて微調整しました – Nkosi