ユーザー名とパスワードを認証した後にトークンを発行するOAuthServerProviderがあります。ユーザー名またはパスワードが無効な場合、デフォルトでコンテキストコードとして400 Bad Request
が返されます。NUnit owinミドルウェアをスキップするテストケース
しかし、私はカスタムヘッダが存在しているとあれば、ヘッダをチェックして、表示されるミドルウェアを書かれているこれを達成するために401 Unauthorized
で応答したいので、401
とステータスコードを交換する場合はif (context.Response.StatusCode == 400 && context.Response.Headers.ContainsKey(Constants.OwinChallengeFlag))
{
var headerValues = context.Response.Headers.GetValues(Constants.OwinChallengeFlag);
context.Response.StatusCode = Convert.ToInt16(headerValues.FirstOrDefault());
context.Response.Headers.Remove(Constants.OwinChallengeFlag);
}
これは、私がフィドラーでヒットしたときにはうまく動作しますが、以下に書いた単体テストは常に400になります。ユニットテストで要求を行うとミドルウェアはスキップされます。
[TestFixture]
public class UnitTest1
{
private TestServer _server;
[SetUp]
public void SetUp()
{
_server = TestServer.Create<Startup>();
}
[Test]
public void ShouldReturnUnauthorizedResponse()
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "/token");
//wrong password
var requestContent = "grant_type=password&UserName=foo&Password=bar";
request.Content = new StringContent(requestContent, Encoding.UTF8, "application/x-www-form-urlencoded");
var response = _server.HttpClient.SendAsync(request).Result;
//This assert fails, but shouldn't
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Unauthorized));
}
}
ここで間違っていることを知る必要があります。
1)これはユニットテストではない統合テストです。 2)スタートアップコンフィギュレーションと完全なミドルウェアを表示します。 3)応答をバッファリングしてストリームにアクセスできるようにしていますか? – Nkosi