2010-02-12 18 views
14

edición: nota, pregunta 288 805 es similar, sin embargo, yo estoy pidiendo específicamente cómo lo hace MSTest elegir el orden de la prueba predeterminado. Por favor vea el resto de esta pregunta. Gracias Eilon por the link.¿cómo determina MSTest el orden en el que se ejecutan los métodos de prueba?

Estaba viendo un proyecto heredado MSTest. Las pruebas siempre se ejecutaron en el mismo orden. El orden no era alfabético y estaba rebotando entre métodos en dos * .cs archivos TestMethod.

No cambié el orden físico del código heredado. Lo hice para mi conveniencia anexar "MSTest01" al nombre del método de la primera prueba, "MSTest02" al nombre del método de la segunda prueba, etcétera.

Para mi sorpresa, el orden de ejecución de las funciones TestMethod cambió; # 3 primero, # 6 segundo, # 5 tercero, etcétera.

Cuando quité las cadenas "MSTestnn" de los nombres de las funciones TestMethod, su orden de ejecución cambió de nuevo a la ordenación anterior, es decir, una prueba desde el primer archivo .cs, dos pruebas de el segundo .cs archivo, cinco pruebas del primer archivo .cs , etcétera.

Parece que la ubicación del archivo no puede ser un factor de mientras TestMethod nombre de la función puede ser un factor.

PREGUNTA: ¿Alguien puede explicar cómo MSTest decide el orden de ejecución de las funciones de TestMethod?

+4

Por lo general, no debe importar en qué orden se ejecutan las pruebas de su unidad. Dicho esto, es una pregunta intrigante. – Mathias

+1

@ Mathias Estoy de acuerdo. Me gusta la forma en que xUnit.net ejecuta pruebas en orden aleatorio. El orden aleatorio es la mejor opción porque es probable que revele dependencias de secuenciación que no deberían existir. Vea mis comentarios a Troy. – gerryLowry

+0

? extraño, mis comentarios a Troy parecen haber desaparecido, junto con su pregunta. – gerryLowry

Respuesta

6

Creo que MSTest ejecuta métodos de prueba ordenándolos por su 'ID' (parece ser su espacio de nombre completo).

Creé un TestProject1 que contiene 4 pruebas unt (UnitTest1, ... 2, ... A, ... B). Cada prueba unitaria contiene 5 métodos de prueba (TestMethodA, ... B, ... 1, ... 2, ... 3). Fueron declarados con orden aleatorio dentro de sus clases de prueba. Ahora, cada vez que ejecute MSTest, las pruebas se ejecutan con el mismo fin:

TestProject1.UnitTest1.TestMethod1 
TestProject1.UnitTest1.TestMethod2 
TestProject1.UnitTest1.TestMethod3 
TestProject1.UnitTest1.TestMethodA 
TestProject1.UnitTest1.TestMethodB 
TestProject1.UnitTest2.TestMethod1 
TestProject1.UnitTest2.TestMethod2 
TestProject1.UnitTest2.TestMethod3 
TestProject1.UnitTest2.TestMethodA 
TestProject1.UnitTest2.TestMethodB 
TestProject1.UnitTestA.TestMethod1 
TestProject1.UnitTestA.TestMethod2 
TestProject1.UnitTestA.TestMethod3 
TestProject1.UnitTestA.TestMethodA 
TestProject1.UnitTestA.TestMethodB 
TestProject1.UnitTestB.TestMethod1 
TestProject1.UnitTestB.TestMethod2 
TestProject1.UnitTestB.TestMethod3 
TestProject1.UnitTestB.TestMethodA 
TestProject1.UnitTestB.TestMethodB 

La única manera de cambiar ese orden es cambiar el nombre de una TestClass o una TestMethod. Si, por ejemplo, cambio el nombre TestMethodB, de UnitTest1, a TestMethod4, se ejecutará antes de TestMethodA.

Para ver los ID de sus métodos de prueba, abra la ventana 'Test View' de VS y luego haga clic derecho en el encabezado de una columna (ej. Test Name) -> "Add/Remove Columns ..." y agregue 'ID 'columna.

+3

Este comportamiento no está especificado y puede cambiar sin previo aviso. –

+0

¿Cómo obtuvo MSTest para generar el pedido de ejecución real? Estoy tratando de lograr lo mismo aquí: https://stackoverflow.com/questions/48379363/how-to-output-the-execution-order-of-unit-tests-in-visual-studio-2017 – philreed

2

En cuanto a la orden de ejecución VSTest. Aquí es cómo está organizada en su TestProject:

  1. Ordenar cs-archivos en su proyecto por su ASC CREACIÓN Tiempo
  2. Posición
  3. Método en cada archivo

Por ejemplo, usted tiene 3 archivos cs en proyecto.

  • UnitTest1.cs - creados 01/01/1970 con métodos TestMethod05 y TestMethod03
  • UnitTest2.cs - creados 05/01/1970 con el método TestMethod02.
  • UnitTest3.cs - creado el 01/03/1970 con el método TestMethod01.

Entonces orden de ejecución de la prueba es la siguiente:

TestProject1.UnitTest1.TestMethod05 
    TestProject1.UnitTest1.TestMethod03 
    TestProject1.UnitTest3.TestMethod01 
    TestProject1.UnitTest2.TestMethod02 

se puede ver el 'orden predeterminado' con el comando:

vstest.console.exe TestProject1.dll/ListTests

+0

¿Hay alguna manera de cambiar ese orden predeterminado en vstest, otro que intente interferir con el tiempo de creación del archivo (eliminar, recrear)? – Razkar

+0

Puede intentar usar la lista de reproducción. Haga clic derecho en el método de prueba en Test Explorer => Agregar a la lista de reproducción => Nueva lista de reproducción –

Cuestiones relacionadas