2009-07-17 13 views
6

Io uso ControllerActionInvoker invocare azioni di controllo forma di unità testControllerActionInvoker per richiamare l'azione con i parametri

var controllerInvoker = new ControllerActionInvoker(); 
var result = controllerInvoker.InvokeAction(
       testController.ControllerContext, "Default"); 

Come si usa per chiamare un'azione che ha i parametri?

[AcceptVerbs(HttpVerbs.Post)] 
[ActionException(SomeAttribute)] 
public SomeResult AddMethod(long[] Ids) 
{ 
    //some code 
} 

risposta

0

Dalla documentazione sembra che si desidera utilizzare il metodo di InvokeActionMethod che permette di passare i parametri in un IDictionary come terzo argomento.

ControllerContext contiene effettivamente dati aggiuntivi che il controller utilizzerà per il binding (filtri, raccoglitori di modelli, dati di percorso). Il tuo argomento dovrà essere passato attraverso ControllerContext.

Ho trovato un example about unit testing controllers.

+0

IT è un metodo protetto. – user99322

+0

Buon punto, lasciatemi aggiornare dopo qualche ricerca ... – cfeduke

+0

Il link all'esempio qui è un collegamento morto –

1

Non si deve utilizzare ControllerActionInvoker dai test dell'unità. Cosa stai cercando di realizzare?

Se stai provando a verificare il comportamento delle tue azioni, chiamale direttamente (sono solo metodi regolari). Se stai provando a testare il comportamento dei tuoi filtri, crea un contesto fittizio per il filtro e chiama il suo metodo OnXxx().

+0

perché non utilizzare ControllerActionInvoker? È necessario testare l'interazione tra gli attributi e l'azione, se ho capito correttamente – kenwarner

+0

@qntmfred - Perché testate l'infrastruttura MVC a quel punto, che è un codice di proprietà di Microsoft. Normalmente, quando si testano le applicazioni MVC, testare solo il codice che è stato scritto e lo si fa separatamente da qualsiasi altra parte dell'infrastruttura. Ciò consente di rintracciare facilmente i problemi in quel codice base. Testare l'infrastruttura - ad es. l'interazione tra il tuo codice e il codice di terze parti - è normalmente un test di integrazione. Ovviamente puoi testare l'invocatore se lo desideri, ma i test unitari potrebbero interrompersi tra le diverse versioni di MVC e potresti diventare pazzo. :) – Levi

Problemi correlati