我尝试在Azure Mobile App .Net Server中使用授权对我的api控制器进行单元测试 .
我的控制器方法如下所示:
[Authorize]
public HttpResponseMessage SomeMethod()
{
var claimsPrincipal = this.User as ClaimsPrincipal;
string userId = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier).Value;
return Request.CreateResponse(HttpStatusCode.OK, userId);
}
我在单元测试方法中配置了我的请求,如下所示:
[TestMethod]
public void SomeMyAPIControllerTest(){
var config = new HttpConfiguration();
var request = new HttpRequestMessage();
request.RequestUri = new Uri("http://localhost:50268/api/MyAPI");
request.Headers.Add("x-zumo-auth", "_user_auth_token_");
request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
var controller = new MyAPIController(TestContext)
{
Request = request
};
var response = controller.SomeMethod();
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
我的控制器方法通过localhost上的swagger正常工作,但是通过unittest方法它不起作用 . 当我尝试检索经过身份验证的用户信息时, claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier)
返回 null
我猜在请求配置中有一个错误 . 有什么建议?
1 回答
对于您的测试,您可以直接在
ApiController
上设置User
.更新您的测试方法以为控制器创建虚假用户 .