2017-03-02 2 views
0

ユーザーIDセット(ユーザーがログインしていると思われる)でWebサービスコールをテストしたいmoqとnunitでWeb APIコントローラをテストする際に、ユーザーIDを模擬する方法は?

私は多数の投稿とstackoverflowの回答を確認しましたが、私は必要な答えを得られませんでした。

私が得た最も近いのはこれです。

var context = new Mock<HttpContextBase>(); 
var mockIdentity = new Mock<IIdentity>(); 
context.SetupGet(x => x.User.Identity).Returns(mockIdentity.Object); 
mockIdentity.Setup(x => x.Name).Returns("abc"); 

この時点で、私はcontrollercontextを設定しなければならず、そのコンテキスト変数は何らかの形で供給される必要があると推測します。

私はMVCコントローラに関する多くの例を見ましたが、私はApiControllerで動作するものを見つけることができませんでした。誰かがこれにいくつかの光を発することができますか?

ありがとうございます!

答えて

2

これは私が私のプロジェクトのためにやったことです:ASP.NETのWeb APIの

this._userController.User = new ClaimsPrincipal(
       new ClaimsIdentity(
        new List<Claim> 
        { 
         new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", "1234"), 
         new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", "[email protected]"), 
         new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "live.com#[email protected]") 
        }) 
       ); 

そして、これは、.NETコアウェブAPI用です:

var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] 
      { 
       new Claim(ClaimTypes.NameIdentifier, "testId"), 
       new Claim(ClaimTypes.Name, "testName") 
      })); 

     this.controller.ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext() 
     { 
      HttpContext = new DefaultHttpContext() { User = user } 
     }; 

はそれが助けなら、私を知ってみましょうか否か。

+0

投稿をいただきありがとうございます。私はテストを行い、アップデートをお届けします! – rlee923

+0

私はあなたが提案したものを試しましたし、クレームアイデンティティに追加されたクレームアイテムはRequestContext.Principal.Identity.NameでもUser.Identity.Nameでもチェックされません(つまりName値は設定されていません)。アイデンティティの下でクレームをチェックするのが標準的な慣行ですか? – rlee923

+0

おかげで、あなたの.netコアWeb APIが私の解決に役立ちました。 – Neville

0

ああ、とても簡単でした。

var identity = new GenericIdentity("bcd"); 

Controller.User = new GenericPrincipal(identity, null); 

この部分は、ユーザーの嘲笑を必要としないので、呼び出すコントローラのユーザーIDを設定する必要があります。

関連する問題