2

[Authorize] 属性を追加した Web API があります。これは、以前に行った単体テストが承認されていないために失敗したことを意味します。以下は、基本的なテストと初期化メソッドのサンプルです。

[TestInitialize]
public void CreateServer() {
    var config = new HttpConfiguration();
    WebApiConfig.Configure(config); // Create the routes
    var server = new HttpServer(config);
    this.client = new HttpClient(server);
}

[TestMethod]
public void MyThings_GET_Returns_All_MyThings() {
    var response = this.client.GetAsync("http://localhost/api/1.0/mythings").Result;

    var mythings = response.Content.ReadAsAsync<IEnumerable<MyThing>>().Result;

    Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    Assert.AreEqual(4, mythings.Count());
}

私が疑問に思っているのは、テストをログインさせて認証フィルターを通過させる方法があるかどうか、または HttpClient 要求と共に ASPXAUTH Cookie として渡す方法があるかどうかです。または、私が考えていなかった承認を渡す別の方法はありますか?

私が試したものは何も機能していないようで、どこでも役立つ情報を見つけるのに苦労しています.

前もって感謝します。

4

2 に答える 2

1

Authorize 属性は、承認チェックを実行するときに何をしますか? 頭に浮かぶかなりの数のオプションがあります。

  • 承認フィルターが、必要な「承認トークン」を取得する複数の手段をサポートするようにします (たとえば、HTTP ヘッダーまたはクエリ文字列パラメーターなどを介して)。
  • テストの初期化の直後に、構成からフィルターをクリアします (まったく呼び出されないようにします)。このルートを選択した場合は、パイプラインでさらに使用される可能性のある承認値を設定する新しいフィルターをポップインすることをお勧めします。
  • IAuthorize依存性注入を使用している場合は、「承認チェック」を構成で更新できる何らかの場所に移動します

また、ヘッダーやパラメーターなどを指定するのに非常に優れているため、エンドポイントへのクエリを作成するためにRestSharpを使用することをお勧めします.

于 2012-09-05T22:04:43.660 に答える
0

私は、この問題に対する自分のやり方が根本的に間違っていると判断しました。Web API で Cookie ベースの認証を使用するのは良い考えではないため、authorize 属性を取り除き、代わりに API キー ベースの認証を実行することにしました。これにより、リクエストで正しい API キーを渡すだけでテストが簡単になりますが、承認のために Cookie に依存していないことも意味します。

于 2012-09-09T19:42:05.260 に答える