web-dev-qa-db-fra.com

Comment se moquer de la méthode d'extension CreateResponse <T> sur HttpRequestMessage

J'utilise ApiController d'ASP.Net MVC 4 RC et j'essaie de tester une méthode GET.

Cette méthode utilise le CreateResponse<T> méthode qui se trouve sur le HttpRequestMessage, mais je n'ai aucune idée de comment se moquer de cela ou de le faire fonctionner correctement.

Le corps de la méthode contient ceci:

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

Dans mon test unitaire, je crée un HttpRequestMessage vide:

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);

Mais il génère juste un InvalidOperationException:

La demande n'a pas d'objet de configuration associé ou la configuration fournie était nulle.

Quelqu'un at-il des conseils sur la façon de configurer la HttpRequestMessage pour que la méthode CreateResponse fasse réellement son travail?

68
Tomas McGuinness

Cela a été résolu en spécifiant une configuration vide:

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

J'ai la réponse à ça d'ici

test unitaire ASP.NET WebApi avec Request.CreateResponse

158
Tomas McGuinness

WebAPI 1 avec VB ici!

J'ai réussi à hybrider les réponses de votre lien ci-dessus pour que cela fonctionne aussi simplement que cela:

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

Il suffit de poster au cas où cela aiderait quelqu'un.

0
Rudy Scoggins