我有一个 WebApi 方法或多或少看起来像这样:
public async Task<HttpResponseMessage> Get(Guid id)
{
var foo = await Store.GetFooAsync(id);
if (foo.BelongsTo != User.Identity.Name)
throw new HttpResponseException(HttpStatusCode.Forbidden);
//return foo here
}
这似乎在实际应用程序中运行良好,其中自定义设置了和IHttpModule
中的主体。HttpContext.User
Thread.CurrentPrincipal
但是,从单元测试调用时:
Thread.CurrentPrincipal = principal;
var response = controller.Get(id).Result;
User
await
之后(即继续)重置,因此测试失败。在 R#8 下运行时会发生这种情况,而 R#7 不会发生这种情况。
我的解决方法是在第一次等待之前保存当前的主体,但这只是满足测试运行器需求的一种技巧。
如何调用我的控制器方法并确保延续与原始调用具有相同的主体?