4

私は多かれ少なかれ次のように見える 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.UserThread.CurrentPrincipal

ただし、単体テストから呼び出す場合:

Thread.CurrentPrincipal = principal;
var response = controller.Get(id).Result;

Userawait後(つまり継続時) にリセットされるため、テストは失敗します。これは R#8 で実行したときに発生し、R#7 では発生していませんでした。

私の回避策は、最初の待機の前に現在のプリンシパルを保存することでしたが、これはテスト ランナーのニーズを満たすためのハックにすぎません。

コントローラー メソッドを呼び出して、継続が元の呼び出しと同じプリンシパルを持つようにするにはどうすればよいですか?

4

2 に答える 2