junit test execution order
Este tutorial explica cómo establecer el orden de ejecución para los casos de prueba JUnit. Aprenderá sobre las anotaciones y clases para establecer el orden de ejecución de la prueba JUnit en JUnit 4 vs JUnit 5:
Aprendimos cómo crear un conjunto de pruebas, cómo agregar una categoría o etiqueta a los casos de prueba y cómo filtrar las pruebas (excluir o incluir los casos de prueba) según la categoría o etiqueta en nuestro tutorial anterior.
Además, aprendimos que en JUnit 4, tenemos @Category, @IncludeCategory, y @ExcludeCategoría para filtrar los casos de prueba mientras JUnit 5 tiene @IncluirEtiquetas y @ExcluirEtiquetas hacer lo mismo.
JUnit 5 tiene opciones de filtrado adicionales usando anotaciones @IncludePackages, @ExcludePackages, y también anotaciones para incluir o excluir clases usando patrones de nombres de clases.
=> Consulte aquí para ver los tutoriales de capacitación de la A a la Z de JUnit .
Lo que vas a aprender:
Orden de ejecución de la prueba JUnit
En este tutorial, aprenderemos cómo establecer un orden para cada caso de prueba para que se ejecuten en el orden establecido. Aprenderemos a ordenar pruebas en JUnit 4 así como en JUnit 5.
Los métodos de prueba no siguen un orden específico de forma predeterminada.No es necesario que los casos de prueba se ejecuten en el orden en que se escribieron.
Hay diferentes formas o modos de establecer el orden de ejecución de los casos de prueba. También profundizaremos en cómo JUnit 4 varía al ordenar los casos de prueba en comparación con JUnit 5.
JUnit 4: @FixedMethodOrder, Class MethodSorters
A partir de JUnit 4.11, tenemos la anotación @FixMethodOrder y MethodSorters.class apoyando la facilidad de establecer una orden para la ejecución de una prueba.
El paquete org.junit.runners. * necesita ser importado para incluir la clase Método Clasificadores . Esta clase decide cómo se deben ordenar los casos de prueba. Método Clasificadores tener Tres enumeración valores.
A continuación se muestran los valores de enumeración de la clase junto con el propósito de cada uno de los valores:
MethodSorters.DEFAULT | Este valor de enumeración ordena la ejecución de la prueba en un orden específico. Sin embargo, nunca es predecible en qué orden se ejecutarán los casos de prueba. |
Por eso, usted tiene el control sobre su decisión sobre qué caso de prueba debe ejecutarse primero y cuáles deben seguir a continuación. | |
He observado que una clase con varios métodos ordenados con la enumeración DEFAULT cuando se ejecuta, el orden sigue siendo el mismo cada vez durante la ejecución de la prueba. | |
Sin embargo, no hay forma de que pueda predecir o averiguar la forma en que se estableció el orden. | |
MethodSorters.JVM | El orden de ejecución de la prueba con la enumeración de JVM es, como su nombre lo indica, lo determina la JVM. |
En este caso, cada vez que ejecute la clase, las pruebas se ejecutarán no en el mismo orden sino en orden aleatorio. | |
En otras palabras, el orden de las pruebas cambia durante cada ejecución. | |
MethodSorters.NAME_ASCENDING | Esta enumeración ordena los métodos de prueba en orden lexicográfico del nombre del método. Por lo tanto, puede estar seguro de que esta es la forma más predecible de ordenar la ejecución de su prueba. |
Por lo tanto, puede decidir de antemano la secuencia de pruebas en función del orden lexicográfico de su nombre que establezca. |
La anotación @FixedMethodOrder toma el parámetro de entrada de Método Clasificadores con su valor de enumeración. El paquete necesario para la anotación es org.junit.FixedMethodOrder.
Veamos cómo se implementa a través del código.
Implementación de código para MethodSorters.
Creemos un archivo de clase JUnit ' Junit4TestOrder.java ' donde usaremos MethodSorters.DEFAULT
El código para Junit4TestOrder.java
|_+_|Ejecutamos la clase tres veces y vemos que se ejecutan las pruebas en el mismo orden que a continuación; sin embargo, los casos de prueba pueden o no ejecutarse en el orden ordenado.
La ventana de la consola mostró los resultados de la siguiente manera: el orden de ejecución de la prueba es TestCase_3, TestCase_1 y TestCase_2 y el orden no cambia con el número de ejecuciones.
Implementación de código para MethodSorters. JVM
Ahora actualizaremos 'Junit4TestOrder.java' para tener MethodSorters.JVM
El fragmento de código para Junit4TestOrder.java
|_+_|Ejecutamos la clase dos veces y el orden de ejecución de las pruebas cambia con cada ejecución.
La ventana de la consola para primero ejecutar es como se muestra a continuación:
La ventana de la consola para segundo ejecutar es como se muestra a continuación:
Observe atentamente el cambio en el orden en el que se ejecutan las pruebas en ambas ejecuciones. El orden de las pruebas en las dos ejecuciones ha sido diferente.
Implementación de código para MethodSorters.NAME_ASCENDING
Ahora actualizaremos 'Junit4TestOrder.java' para tener MethodSorters.NAME_ASCENDING
El fragmento de código para Junit4TestOrder.java
|_+_|Ejecutamos la clase dos veces, el orden de las pruebas ejecutadas sigue siendo el mismo y se ejecuta según el orden ascendente del nombre del método.
La ventana de la consola muestra el resultado de las pruebas ejecutadas en el orden TestCase_1, TestCase_2 y TestCase_3.
JUnit 5: @TestMethodOrder, @Order, Interface MethodOrderer
Para controlar el orden de ejecución de las pruebas, las siguientes entidades ayudan a hacer lo mismo:
- La anotación @TestMethodOrder
- La anotación @Order
- Las clases que pertenecen a las interfaces MethodOrderer
Las clases MethodOrderer incorporadas y sus detalles son los siguientes:
MethodOrderer's construido en clase | Del paquete | Detalles |
---|---|---|
Alfanumérico | org.junit.jupiter.api.MethodOrderer.Alphanumeric | Ordena los métodos de prueba alfanuméricamente según sus nombres |
OrderAnnotation | org.junit.jupiter.api.MethodOrderer.OrderAnnotation | Ordena los métodos de prueba numéricamente según los valores pasados a la anotación @Order |
Aleatorio | org.junit.jupiter.api.MethodOrderer.Random | Ordena los métodos de prueba aleatoriamente como en el caso MethodSorters.JVM en JUnit 4 |
Veamos ahora la demostración de cada una de estas estrategias de pedido:
Implementación de código para Alphanumeric.class
Creemos un archivo de clase JUnit 5 llamado JUnit5TestOrder.java igual que JUnit4TestOrder.java y usemos la anotación con Alphanumeric.class para ordenar las pruebas alfanuméricamente.
El código para Junit5TestOrder.java
|_+_|Ejecutamos la clase tres veces y aún vemos el mismo orden de pruebas que se ejecutan en el orden alfanumérico ordenado del nombre del método de prueba.
Después de la ejecución del archivo de clase, el orden de ejecución de la prueba:
- Testcase_1,
- Testcase_2 y
- Testcase_3
Nota: La estrategia de ordenación alfanumérica distingue entre mayúsculas y minúsculas así que en caso de que tuviéramos otro caso de prueba con el nombre testcase_1.
El orden de ejecución sería:
- Testcase_1,
- Testcase_2,
- Testcase_3,
- testcase_1.
Por lo tanto, las mayúsculas tienen prioridad sobre los nombres de métodos en minúsculas.
Implementación de código para Random.class
Ahora actualizaremos la clase JUnit 5 JUnit5TestOrder.java para usar la anotación con Random.class
El fragmento de código para Junit5TestOrder.java
|_+_|Ejecutamos la clase dos veces y vimos que cada vez que ejecutamos la clase, el orden de ejecución de la prueba se ordenó al azar.
Ejecución posterior del archivo de clase para el primera vez , el orden de ejecución de la prueba fue:
- Testcase_2,
- Testcase_1
- Testcase_3
El orden de ejecución cuando se postuló para el segundo el tiempo mostró:
- Testcase_2,
- Testcase_3
- Testcase_1 .
Implementación de código para OrderAnnotation.class
Ahora actualizaremos la clase JUnit 5 JUnit5TestOrder.java para usar la anotación con OrderAnnotation.class. La anotación @Orden También jugará un papel importante en el establecimiento de prioridades de los métodos de prueba aquí.
El fragmento de código para Junit5TestOrder.java
|_+_|Entonces, en esta estrategia de configurar el orden para la ejecución de la prueba, la anotación @Order obliga a que los métodos de prueba se ejecuten según el valor del pedido siendo preparado para ello.
Cuanto menor sea el valor de @Order para un método de prueba, mayor será su prioridad durante la ejecución.
Después de la ejecución, el orden de las pruebas se ejecutó de la siguiente manera:
- Testcase_3,
- Testcase_1
- Testcase_2 porque el orden establecido para los casos de prueba es 1,2 y 3, respectivamente.
Es por eso que no importa si los casos de prueba están escritos en orden. Además, no importa si los nombres de los métodos están o no en orden alfanumérico.
JUnit 5: Creación de pedidos personalizados
Además, las clases de pedidos integradas, JUnit 5 también admite pedidos personalizados al implementar la interfaz MethodOrderer . A partir de la versión 5.4 de JUnit 5, se admite la ordenación personalizada.
Veamos rápidamente cómo crear e implementar un orden personalizado por longitud de método.
Paso 1: Creó una clase de orden personalizada implementando la interfaz MethodOrderer y nombró la clase como TestCaseLengthOrder
El código para TestCaseLengthOrder.java
|_+_|TestCaseLengthOrder explicación del código:
- Una clase de orden personalizada se crea implementando la interfaz MethodOrderer.
- void orderMethods (MethodOrderContext context) {} método que es el método incorporado implementado desde la interfaz MethodOrderer. Aquí es donde se define la implementación de la lógica de ordenación de pruebas.
- MethodDescriptor es una interfaz que incluye detalles sobre un método:
- El método MethodDescriptor.getMethod () obtiene el nombre del método para este descriptor.
- El nombre del método se convierte a String con el método getName () es decir, MethodDescriptor.getMethod (). GetName () y
- El método length () obtiene la longitud del método (al igual que string.length () obtiene la longitud de un valor de cadena).
- Todos los nombres de métodos se comparan entre sí mediante el método compareTo ().
- El método getMethodDescriptors () obtiene la lista de todos los descriptores de método en una clase.
- El método sort () ordena los objetos MethodDescriptor.
Ahora que hemos entendido claramente cada API de MethodOrderer, esperamos que sea fácil de interpretar el código anterior.
Paso 2 : Use la clase de orden personalizada como usa cualquier orden incorporada en la clase de prueba.
Como entrada a la anotación @TestMethodOrder.
El código de JUnit_CustomOrder.java
|_+_|Paso 3:
Post ejecución de JUnit_CustomOrder.class , el orden de ejecución de la prueba es el siguiente según el orden ascendente de la longitud del nombre de los casos de prueba:
- agregar(),
- subt (),
- divide()
- multiplicar()
Conclusión
Para concluir este tutorial sobre JUnit Test Execution Order.
- Aprendimos a establecer el orden de los casos de prueba utilizando anotaciones específicas y clases específicas.
- También aprendimos varias formas de ordenar pruebas para JUnit 4 y JUnit 5, en función de las cuales cambiaron las estrategias de ordenación.
- Además, aprendimos cómo en JUnit 5, también podíamos crear una clase de clasificación personalizada y usarla para ordenar los casos de prueba durante su ejecución.
=> Eche un vistazo a la guía para principiantes de JUnit aquí.
Lectura recomendada
- Pruebas JUnit: Cómo escribir casos de prueba JUnit con ejemplos
- Lista de anotaciones de JUnit: JUnit 4 Vs JUnit 5
- JUnit Ignore Test Case: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- JUnit Test Suite y filtrado de casos de prueba: JUnit 4 Vs JUnit 5
- ¿Qué es un dispositivo de prueba JUnit? Tutorial con ejemplos de JUnit 4
- Tutorial de JUnit para principiantes: ¿Qué son las pruebas de JUnit?
- Múltiples formas de ejecutar pruebas JUnit
- Cómo ejecutar la ejecución a gran escala de pruebas de Appium en paralelo