2017-03-02 24 views
0

我想與用戶身份設置爲測試Web服務調用(假裝的用戶登錄)如何在用moq和nunit測試web api控制器時模擬用戶身份?

我檢查了無數的職位和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網頁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(即未設置名稱值)進行檢查。檢查身份下的索賠是否是標準做法? – rlee923

+0

感謝Hung,您的.net核心web api幫助我解決了這個問題。 – Neville

0

Awww,它很簡單。

var identity = new GenericIdentity("bcd"); 

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

原來這部分不需要嘲笑用戶,你只需要設置你正在調用的控制器的用戶ID。

相關問題