2011-07-12 19 views
6

¿Cómo puedo probar un controlador/acción .net mvc?.net MVC prueba funcional

Vengo de muchos años de desarrollo de Rails en un concierto en el que estoy pirateando .net mvc. Duele, pero espero que gran parte de esto sea solo la curva de aprendizaje.

Lo que no me resulta inmediatamente obvio es un análogo para pruebas funcionales y de integración de Rails en el mundo .NET. Rails hace que las pruebas funcionales sean tan obvias y simples que sería una tontería no tomarse el tiempo para obtener cobertura en su lugar. Con .NET: aún no he conseguido que Google arroje un solo resultado que parezca que vale la pena. Espero que sea mi incipiente .net el que me impide ingresar a los términos de búsqueda correctos o me falta algo de paradigma.

AYUDA!

+0

Una acción del controlador es simplemente un método y se puede probar como tal (utilizando simulación/burla para aislamiento). ¿Hay algo más en particular en las pruebas funcionales que el patrón Arrange, Act, Assert para cada condición y proporcionar las instancias concretas de las clases para evitar el aislamiento y la prueba de toda la aplicación? – StuperUser

+2

Parte del motivo puede ser la terminología. En el mundo de Rails hablamos de pruebas funcionales, pero realmente nos referimos a pruebas unitarias para nuestros controladores. Según lo que he visto, la mayoría de los programadores de Rails mezclan pruebas unitarias verdaderas (solo código de prueba) y pruebas funcionales (incluidas dependencias externas, como una base de datos). La comunidad .NET parece seguirlos más de cerca. Roy Osherove tiene un libro decente sobre pruebas en .NET http://artofunittesting.com/ –

Respuesta

0

Si realmente desea probar la funcionalidad, a diferencia de las pruebas de "unidad" estándar, tiene algunas opciones.

  1. Sea creativo y use la prueba de MS para configurar más pruebas basadas en funciones.
  2. utilizar un tipo BDD del marco (specFlow?)
  3. utilizan un marco de pruebas más funcional, como el selenio

Si usted está apuntando la prueba de la función hacia la UAT más automatizado, también tiene elementos como el FIT Marco (y Fitnesse).

¿Son estos un análogo directo a las herramientas y marcos en Rails? No, pero .NET no es Rails.

+0

Correcto, entiende que son manzanas y naranjas. La verdadera pregunta debería haber sido: "¿Cuál es la forma correcta de probar funcionalmente un controlador/acción de mvc". No sabía si había un patrón prescrito o si era de composición abierta. Supongo que estoy buscando la guía de principiantes de pruebas funcionales .NET noob. – Cory

+0

@Cory, vea mi comentario en la publicación original con respecto a la terminología de "pruebas unitarias" y "pruebas funcionales". También recomendé un libro :) –

+0

@Wizard - acordado en la distinción. gracias por el puntero. – Cory

3

Perdóneme por mi falta de conocimiento de Rails y por contarle lo que ya sabe sobre los rieles, pero espero poner las cosas en un formato de comparación para otros usuarios.

Rails tiene 3 tipos de pruebas Unidad, Funcional e Integración.

pruebas unitarias prueba sus modelos

pruebas funcionales para sus controladores

pruebas de integración para probar el flujo entre el controlador acciones

Este paradigma parece ser enseñado desde el principio con los carriles.

Sin embargo, en el mundo de .NET MVC, los métodos de prueba no se presentan como en Rails.

Muchos desarrolladores escriben Pruebas unitarias en sus controladores en la forma en que escribe una Prueba unitaria en sus Modelos en rieles. Básicamente llama a un método (Acción del controlador) y recupera un objeto del método. A continuación, puede afirmar que tiene los valores que espera. Hacer esto es un dolor en el trasero porque tienes que burlarte de tanta porquería (HttpContext, etc.). Además, no es una prueba funcional. Solo está probando un método en lugar de probar la funcionalidad de la aplicación.

En Rails no está escribiendo una Prueba de unidad en su controlador, en realidad está realizando una solicitud web y obtiene una respuesta web. Puede verificar el código de estado, las cookies, etc. Está probando el sistema de principio a fin.

Hay varias formas de hacerlo.NET MVC

1) Steven Sanderson tiene una pequeña herramienta para ayudar con esto.

http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

Cuando vi por primera vez y empecé a usarlo, pensé que era impresionante, pero me encontré con problemas.

2) RestSharp + NUnit: esta es mi preferencia actual para realizar este tipo de pruebas. Te permite juntar una solicitud web y obtener una respuesta bastante fácil. Con unos pocos métodos genéricos puedes moverte bastante rápido con restsharp. NUnit le dará las afirmaciones que necesita. Acabo de realizar la solicitud contra mi servidor IIS local y afirmo los diferentes elementos que espero en la respuesta. Realmente no podrá probar qué modelo está asignado a la vista como puede hacerlo en rieles, pero eso no ha sido un problema para mí.

Si está acostumbrado a RSpec, puede obtener SpecFlow que debería ser similar.

Rails crea pruebas directamente en el marco y es un ciudadano de primera clase. Es una pena que no sea así en .NET MVC.

Espero que ayude.

0

La mejor manera de probar la unidad de la aplicación MVC es agregar un nuevo Unit Test Project dentro de la solución. Simplemente haga clic derecho en la solución del proyecto, haga clic en agregar y luego agregar -> proyecto de prueba.

Verá una clase de prueba que tendrá métodos con el atributo [TestMethod] encima. Estará escribiendo su lógica de prueba unitaria en estos métodos.

Dentro del proyecto de prueba agregue una nueva referencia .dll del proyecto MVC en el que se realizará la prueba unitaria. Esto permitirá que el proyecto de prueba descubra las acciones reales del controlador del proyecto principal.

Agregue una referencia al espacio de nombres System.Web.MVC.

Por favor, se refieren a una muestra de un método de prueba a continuación:

[TestMethod] 
public void DisplayCustomer() 
{ 
    CustomerController obj = new CustomerController(); 
    var testResult = obj.DisplayCustomer(); 
    Assert.AreEqual("DisplayCustomer",testResult.ViewName); 
} 

generar y ejecutar el proyecto para ver pasar/pruebas fallidas en los resultados de pruebas ventana

Espero que esto ayude!

Gracias.

Cuestiones relacionadas