java - run - ¿Cómo puedo definir una orden para ejecutar pruebas junit en Intellij?
junit java intellij (3)
Tengo una prueba de junits escamosa que solo falla si ejecuto todas mis pruebas. Creo que una prueba está causando que otra prueba falle, quiero probarlo antes de intentar solucionarlo.
Si ejecuto todas las pruebas, ejecuta la "configuración incorrecta" y luego ejecuta la "prueba que falla después de una configuración incorrecta". También ejecuta un montón de pruebas irrelevantes y lentas en el medio. Pero si utilizo un patrón para ejecutar solo estos dos, ejecuta "prueba que falla después de una mala configuración" y luego "configuración incorrecta". Como resultado, ambos pasan.
¿Cómo solo ejecuto "configuración incorrecta" y "prueba que falla después de una configuración incorrecta", en ese orden?
Como dijo Ali Dehghani, usted puede ordenar la ejecución del método de prueba por
@FixMethodOrder (MethodSorters.NAME_ASCENDING): ordena los métodos de prueba por nombre de método, en orden lexicográfico.
Código:
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class ApplicationTest extends ActivityInstrumentationTestCase2<MainActivity> {
public ApplicationTest() {
super(MainActivity.class);
}
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
void t1AttachUI(){
// testing code goes here
}
@Test
void t2InitializeViews(){
// testing code goes here
};
@Test
void t3SettingValues(){
// testing code goes here
};
@Test
void t4Validation(){
// testing code goes here
};
@Test
void t3AfterButtonPress(){
// testing code goes here
};
}
De acuerdo con la wiki de JUnit :
Por diseño, JUnit no especifica el orden de ejecución de las invocaciones de métodos de prueba. Hasta ahora, los métodos simplemente se invocaban en el orden devuelto por la API de reflexión. Sin embargo, usar el orden JVM no es aconsejable ya que la plataforma Java no especifica ningún orden en particular, y de hecho JDK 7 devuelve un orden más o menos aleatorio. Por supuesto, un código de prueba bien escrito no asumiría ningún orden, pero algunos lo hacen, y una falla predecible es mejor que una falla aleatoria en ciertas plataformas.
A partir de la versión 4.11, JUnit utilizará de forma predeterminada un orden determinista, pero no predecible (MethodSorters.DEFAULT). Para cambiar el orden de ejecución de la prueba, simplemente anote su clase de prueba usando @FixMethodOrder y especifique uno de los MethodSorters disponibles:
@FixMethodOrder(MethodSorters.JVM)
: Deja los métodos de prueba en el orden devuelto por la JVM. Este orden puede variar de ejecución a ejecución.
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
:@FixMethodOrder(MethodSorters.NAME_ASCENDING)
los métodos de prueba por nombre de método, en orden lexicográfico.
Puede usar MethodSorters.NAME_ASCENDING
y cambiar los nombres de sus métodos para que coincidan con su orden específica. Sé que estás usando esto solo para depurar el sake, pero es un olor de prueba confiar en el orden de ejecución de tus métodos de prueba y JUnit no proporciona un control de grano más fino sobre el orden de ejecución de los métodos de prueba.
Las pruebas unitarias deben ser independientes, por lo que la mayoría de los marcos no garantizan ni hacen cumplir el orden en que se ejecutan. Pero dado que desea aplicar un pedido de la manera más fácil que lo he hecho en el pasado, crear un conjunto de pruebas "desechables" o un método de prueba que llame a las pruebas en el orden en el que deseo que se ejecuten. Las pruebas unitarias son métodos solo llámalos. Esto es fácil de hacer si está lidiando con decenas de pruebas, nada atractivo si se trata de cientos o miles.
Intente aislar la interacción escamosa tanto como sea posible, luego cambie el orden de las pruebas con poca interacción dentro del método de llamadas desechables.