tests - Crear mi propio MethodSorter para junit''s @FixMethodOrder
junit test priority (1)
Respuesta corta
Esto no es fácil, y se desaconseja, porque JUnit no fomenta las pruebas dependientes.
Respuesta larga
Para obtener más información, consulte la discusión ampliada sobre SortMethodsWith que le permite al usuario elegir el orden de ejecución de los métodos dentro de una clase de prueba .
JUnit no alienta a las personas a escribir pruebas que dependen de otras pruebas. @FixMethodOrder se introdujo después de una discusión sobre los métodos de prueba de clasificación para predecibilidad .
El problema básico era que Java 7, al usar la reflexión para encontrar métodos, no los devuelve en un orden consistente. Con Java 6, estaba prácticamente garantizado que serían devueltos en el orden en que aparecen en el archivo fuente. Este ya no es el caso.
Algunas clases de prueba tienen pruebas dependientes (ya sea por diseño o por accidente). Ordenar los métodos de prueba para predecibilidad al menos garantiza que estas pruebas se ejecutarán en un orden consistente. Sin embargo, este orden se basa en el código hash del método, por lo que el orden es determinista, pero difícil de predecir. Entonces, si tiene un problema con su orden de pruebas, entonces no es fácil ni obvio cómo arreglar el pedido. Debe encontrar un nombre de método de prueba con un hashCode superior / inferior.
@FixMethodOrder
se introdujo para permitir a los usuarios solucionar su problema de pedido fácilmente, simplemente cambiando el nombre. Pero, al menos para mí, se ve como una solución temporal, hasta que se puedan reparar las pruebas rotas.
Tenga en cuenta también que generalmente puede especificar el orden de ejecución de prueba de surefire , y hay opciones similares en ant.
Para obtener más información, acabo de publicar una publicación de blog sobre este mismo tema .
junit 4.11 viene con @FixMethodOrder
-annotation, que permite seleccionar una implementación MethodSorter para ordenar las pruebas junit. Hay tres clasificadores predeterminados, JVM
, NAME_ASCENDING
y DEFAULT
.
Ahora, me gustaría crear mi propio MethodSorter. ¿Alguien puede ayudarme con algún consejo sobre cómo hacer eso?