2009-07-17 9 views
6

utilizo ControllerActionInvoker para invocar las acciones del controlador forma de unidad de pruebaControllerActionInvoker para invocar la acción con parámetros

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

¿Cómo se utiliza para llamar a una acción que tiene parámetros?

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

Respuesta

0

De la documentación que parece que desea utilizar el método InvokeActionMethod que le permite pasar parámetros en un IDictionary como el tercer argumento.

El ControllerContext en realidad lleva consigo datos adicionales que el controlador utilizará para el enlace (filtros, carpetas de modelo, datos de ruta). Su argumento deberá pasar a través del ControllerContext.

Encontré un example about unit testing controllers.

+0

IT es un método protegido. – user99322

+0

Buen punto, déjame actualizar después de un poco de investigación ... – cfeduke

+0

El enlace al ejemplo aquí es un enlace muerto –

1

No debe usar el ControllerActionInvoker desde las pruebas de su unidad. ¿Qué estás realmente tratando de lograr?

Si está intentando probar el comportamiento de sus acciones, simplemente llámelas directamente (son solo métodos regulares). Si intentas probar el comportamiento de tus filtros, crea un contexto simulado para el filtro y llama a su método OnXxx().

+0

¿por qué no usar el ControllerActionInvoker? Es necesario para probar la interacción entre los atributos y la acción, si entiendo correctamente – kenwarner

+0

@qntmfred - Porque está probando la infraestructura MVC en ese punto, que es un código de propiedad de Microsoft. Normalmente, cuando la unidad prueba aplicaciones MVC, solo prueba el código que ha escrito, y lo hace de forma aislada de cualquier otra parte de la infraestructura. Esto le permite localizar problemas en esa base de código fácilmente. Prueba de la infraestructura, p. la interacción entre su código y el código de un tercero es normalmente una prueba de integración. Por supuesto, puedes probar el invocador si lo deseas, pero las pruebas unitarias pueden romperse entre las diferentes versiones de MVC, y es posible que te vuelvas loco. :) – Levi

Cuestiones relacionadas