web-dev-qa-db-ja.com

HttpRequestMessageでCreateResponse <T>拡張メソッドをモックする方法

ASP.Net MVC 4 RCのApiControllerを使用しており、GETメソッドの単体テストを試みています。

このメソッドはHttpRequestMessageにあるCreateResponse<T>メソッドを使用しますが、これをモックする方法や正しく機能させる方法がわかりません。

メソッドの本体には次のものが含まれます。

MediaTypeHeaderValue header = new MediaTypeHeaderValue(versionedSmartBlock.ContentType);
var response = Request.CreateResponse<SmartBlock>(
    HttpStatusCode.OK, versionedSmartBlock, header);

単体テスト内で、空のHttpRequestMessageを作成します。

CallsController api = new CallsController(
    managerMock.Object, config, adapterFactoryMock.Object);
api.Request = new HttpRequestMessage(
    HttpMethod.Get, "http://localhost/Initiate?ern=%2B44123456789");    
var response = api.Get("+44123456789", null);

しかし、それは単にInvalidOperationExceptionを生成します:

要求に構成オブジェクトが関連付けられていないか、提供された構成がヌルでした。

HttpRequestMessageメソッドが実際に仕事をするようにCreateResponseを構成する方法についてのポインタを持っている人はいますか?

68

これは、空の構成を指定することで解決しました。

request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());

私はここからその答えを得ました

Request.CreateResponseを使用したASP.NET WebApiユニットテスト

158

VBここで!

上記のリンクからの応答をハイブリッドにして、これを次のように簡単に機能させることができました。

Dim request As HttpRequestMessage = New HttpRequestMessage()
Return request.CreateResponse(HttpStatusCode.BadRequest, myCustomClassObject, GlobalConfiguration.Configuration)

誰かに役立つ場合にだけ投稿してください。

0
Rudy Scoggins