2011-01-13 19 views
18

Tengo 2 preguntas sobre la realización de pruebas de integración con VS 2010¿Cómo ordenar los métodos de ejecución usando Visual Studio para realizar pruebas de integración?

En primer lugar, realmente necesito encontrar la manera de ejecutar estos métodos de prueba en el orden que quiero. Nota: Sé que en Pruebas unitarias, los métodos deben ejecutarse de forma independiente de cualquier otra cosa, pero estas son pruebas de integración que sí dependo del orden de qué método se ejecuta primero.

En la misma nota, ¿hay alguna manera de mantener una variable local mediante la ejecución de las pruebas? Por ejemplo, como el siguiente código que ahora falla.

[TestClass] 
public class UnitTest1 
{ 
    int i = 0; 
    [TestMethod] 
    public void TestMethod1() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod2() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

¿Hay alguna manera de hacer esto?

Respuesta

21

Para ejecutar pruebas en un orden específico que siguieron los siguientes pasos:

En un proyecto de prueba con test1, test2 test3 y

1 Haga clic con el botón derecho en el proyecto 'Añadir' -> 'nueva prueba ..."
2 Seleccione 'venta prueba'
3 Haga doble clic en el archivo de t aparece el mensaje "OrderedTest1".orderedtest"

alt text

4 Construir el proyecto si no se construye con anterioridad
5 En la lista de prueba disponible, seleccione la prueba que desea y para ellos

alt text

A partir de ese señale que aparece una nueva prueba en el editor de la lista de prueba

alt text

Es una prueba adicional que ejecuta las pruebas incluidas en el orden correcto, pero si se ejecuta toda la prueba en el proyecto sin cuidado las pruebas incluidas en la lista ordenada se ejecutará en dos ocasiones por lo que necesita para gestionar de alguna manera las listas o categorías de prueba para evitar eso.
Intenté deshabilitar las pruebas individuales, pero eso también deshabilita la prueba ordenada, no conozco una mejor manera de hacerlo.

+0

Gracias a Cristian por su tiempo en la foto. Lo marqué como respuesta. Sin embargo, tengo que decir que esto puede ser demasiado para lo que estaba buscando, por lo que probablemente tendré que incluir varias pruebas en un solo método de prueba por ahora. También contacté con Rob, dijo que los diferentes corredores de prueba se comportan de manera diferente, VS parece ejecutar estos métodos de prueba en orden aleatorio ya que los trata como Pruebas unitarias que deberían poder ejecutarse en cualquier orden. Desearía que tuvieran un atributo para marcar la clase de prueba como [IntegrationTest] y luego ejecutar los métodos en el orden en que aparecen. –

+0

@Cristian, después de leer tantos "No se puede hacer" y "debes cambiar el nombre de tus pruebas para ordenarlas alfabéticamente", etc. tu respuesta es la primera que realmente funciona sin ser un truco. ¡Gracias por esto! – callisto

6

Es una buena práctica usar las funciones para configurar las pruebas y limpiarlas, utilizando los atributos [TestInitialize] y [TestCleanUp] o [ClassInitialize] y [ClassCleanup].
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting(v=VS.100).aspx

El siguiente código es un ejemplo de una cosa similar a lo que quiere:

[TestClass] 
public class UnitTest1 
{ 
    int i=0; 

    [TestInitialize] 
    public void Setup() 
    { 
     i = 5; 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     Assert.AreEqual(5, i); 
    } 
} 

la función de configuración se llamará antes de ejecutar cada prueba. Si necesita pasar el valor de una prueba a la otra, es posible que desee considerar el uso de una variable estática que no se recomienda debido al orden de ejecución indeterminista.

Por lo general, hay una manera de evitar la necesidad de un orden específico mediante la técnica de instalación/limpieza, pero es cierto que esto puede no ser cierto para pruebas de integración muy complejas.
Si no hay manera posible de evitar que se reordenen, puede considerar fusionarlos en uno, rompiendo de nuevo la mejor práctica de tener solo una afirmación por prueba, pero si son tan dependientes uno del otro podría ser incluso mejor de esta manera, ya que en este caso una falla de prueba podría comprometer el resultado de los demás.

EDIT: puede estar usando pruebas ordenadas responde a la pregunta 1, y el uso de variables estáticas Pregunta 2: http://msdn.microsoft.com/en-us/library/ms182631.aspx

+0

Gracias, Cristian por su aporte. Soy consciente de los atributos que mencionaste y desafortunadamente estos no son lo que busco. Estoy ejecutando pruebas de integración contra una fuente de datos de prueba, por lo que incluso si fallan en el medio en alguna parte, puedo restaurar los datos. Vi un video de Rob Conery en SpecFlow en el que parecía haber logrado estos http://tekpub.com/view/concepts/5. Simplemente no sé cómo lo hizo. –

+0

Acabo de agregar editado la pregunta y agregué la idea de las pruebas ordenadas. Avísame si eso realmente funciona. –

+0

Gracias, Cristian, acabo de ver las pruebas ordenadas como me indicó, pero no sé exactamente cómo ejecutarlas. Seleccioné las pruebas que quiero en el panel de la derecha, pero cuando presiono ejecutar prueba, ejecuto todas las pruebas que tengo en la solución completa, ¿alguna idea? –

Cuestiones relacionadas