2013-06-21 9 views
5

Sto scrivendo un filtro azione OnActionExecuting e voglio testare la funzionalità dell'unità.Mocking HttpActionContext.ActionArguments durante il test di Web.Api ActionFilter

Una delle cose che il filtro deve fare è eseguire alcune convalide sugli argomenti di azione passati nel filtro.

Sto ottenendo gli argomenti dal dizionario actionContext.ActionArguments che sta funzionando bene per l'implementazione ma sto avendo difficoltà a gestire l'unità testarlo.

Nel mio test non riesco a impostare actionContext.ActionArguments in quanto non ha un setter né posso prenderlo in giro perché non è virtuale.

Questo mi ha lasciato un po 'in imbarazzo sul fatto che io possa ottenere qualsiasi valore dai test unitari in questo scenario?

risposta

9

In base al codice sorgente AspNetWebStack, actionContext.ActionArguments è solo un semplice dizionario. È quindi piuttosto banale inserire una coppia di valori chiave in essa. Vorrei fare qualcosa come

actionContext.ActionArguments [chiave] = valore;

nella parte organizzativa del test dell'unità.

Speranza che aiuta

4

Vedi il mio blog per questo: https://dondeetan.com/2016/09/19/validating-and-unit-testing-web-api-2-route-attribute-parameters/

var mockactioncontext = new HttpActionContext 
      { 
       ControllerContext = new HttpControllerContext 
       { 
        Request = new HttpRequestMessage() 
       }, 
       ActionArguments = { { "employeeid", "null" } } 
      }; 

      mockactioncontext.ControllerContext.Configuration = new HttpConfiguration(); 
      mockactioncontext.ControllerContext.Configuration.Formatters.Add(new JsonMediaTypeFormatter()); 

      var filter = new <youractionattributefilterclass>(); 
      filter.OnActionExecuting(mockactioncontext); 
      Assert.IsTrue(mockactioncontext.Response.StatusCode == HttpStatusCode.BadRequest); 
+0

Sai perché non un'istanza di Dictionary può essere passato a ActionArguments? Fallisce per me e dice ActionArguments è di sola lettura. – Gerrit

+0

Scusa risposta in ritardo. Non provarlo. –

Problemi correlati