11

ユーザーが認証されているかどうかを確認するコントローラーコードがあり、その場合は特定のクレームがあるかどうかを確認するコントローラーコードがあります。正常に動作します。ASP.NET MVC Webアプリケーションでクレームプリンシパルを模倣する方法はありますか?

私はいくつかの単体テストを持っています。私はIPrincipal(これは簡単です)をモックする必要があります...しかし、私はどのように主張をチェックするか分からない!私はよく分からないので..私は通常

public static ClaimsPrincipal ClaimsPrincipal(this Controller controller) 
{ 
    return controller.User as ClaimsPrincipal; 
} 

と、いくつかのコントローラのコードのような何かを...

​​

が、私は私のユニットテストでこれをテストするとき、このすべてが失敗したどのように私はmockをすることができますthe ClaimsPrincipal

アイデア?

答えて

3

また、ほとんどの方法は仮想的なものであり、それらは模擬可能です。 ClaimsPrincipalのモック

6

「模擬」とは何を意味するのかよくわかりません。しかし、単にクレーム・プリミティブを最初から作成することはできます。まず、ClaimsIdentityを作成します。必要なクレームと認証方法を追加します。その後、ClaimsPrincipalでラップします。

10

var cp = new Mock<ClaimsPrincipal>(); 
cp.Setup(m => m.HasClaim(It.IsAny<string>(),It.IsAny<string>())) 
    .Returns(true); 

がしかしそれにどのようにあなたのコントローラ利得がアクセスになります依存しすぎて難しいイマイチ。

var cp = new Mock<ClaimsPrincipal>(); 
cp.Setup(m => m.HasClaim(It.IsAny<string>(), It.IsAny<string>())).Returns(true); 

var sut = new UtilityController(); 

var contextMock = new Mock<HttpContextBase>(); 
contextMock.Setup(ctx => ctx.User).Returns(cp.Object); 

var controllerContextMock = new Mock<ControllerContext>(); 
controllerContextMock.Setup(con => con.HttpContext).Returns(contextMock.Object); 

sut.ControllerContext = controllerContextMock.Object; 

var viewresult = sut.Index(); 
:この質問あなたにこのような何かを与えるだろう How to mock Controller.User using moq

を見て

関連する問題