とモッキングFormsIdentity.Ticket.UserData私は次のように動作しませんFormsIdentity.Ticket.UserData部品番号
の戻り値を模擬しようとしていますが、それは私が何のアイデアを与える必要がありますユニットテストの一環として、やろうとしている。
var principal = Mock<IPrincipal>();
var formsIdentity = Mock<FormsIdentity>();
formsIdentity.Setup(a => a.Ticket.UserData).Returns("aaa | bbb | ccc");
principal.Setup(b => b.Identity).Returns(formsIdentity.Object);
私がテストしようとしていたコードは次のようなものになります。
FormsIdentity fIdentity = HttpContext.Current.User.Identity as FormsIdentity;
string userData = fIdentity.Ticket.UserData;
を私はユニットテストでやりたいすべてはFormsIdentity.Tiからの戻り値偽物でありますcket.UserData。しかし、最初のセクションでコードを実行すると、FormsIdentityをモックしようとするとエラーが発生します。エラーは、模擬する型は、インタフェース、抽象クラス、または非密閉クラスでなければならないと言います。
FormsIdentityの代わりにIIdentityを使用しようとしましたが(FormsIdentityはIIdentityの実装です)、IIdentityには.Ticket.UserDataがありません。
FormsIdentity.Ticket.UserDataから値を取得するには、どうすればこのテストを書くことができますか?
に役立ちますが、私がテストしようとしていた方法はあまりやっていたが判明します。それはテストすることを困難にしていた単一の責任パターンに違反していました。 私はそれ以来、メソッドをリファクタリングしています。 元の質問については、FormsIdentity.Ticket.UserDataをモックする方法はありません。封印されたクラスの一部です。 – codette