junit
Prova l'ordine di esecuzione
Ricerca…
Sintassi
- @FixMethodOrder // Esegue il test utilizzando il sorter del metodo predefinito
- @FixMethodOrder (MethodSorters) // Esegue il test utilizzando MethodSorter associato all'enumerazione MethodSorters.
Ordine predefinito
Utilizzare l'annotazione - @FixMethodOrder(MethodSorters.DEFAULT)
. Questo esegue tutti i test all'interno della classe in un ordine deterministico e alquanto prevedibile. L'implementazione esegue il hashing dei nomi dei metodi e li confronta. Nello scenario di un pareggio, esso ordina secondo l'ordine lessicografico.
Segmento di codice di seguito preso da JUnit Github - MethodSorter.java
public int compare(Method m1, Method m2) {
int i1 = m1.getName().hashCode();
int i2 = m2.getName().hashCode();
if(i1 != i2) {
return i1 < i2 ? -1 : 1;
}
return NAME_ASCENDING.compare(m1,m2);
}
Esempio
@FixMethodOrder(MethodSorters.DEFAULT)
public class OrderedTest {
@Test
public void testA() {}
@Test
public void testB() {}
@Test
public void testC() {}
}
Supponiamo che gli hash per testA
, testB
e testC
siano rispettivamente 3, 2 e 1. Quindi l'ordine di esecuzione è
- TestC
- TestB
- TESTA
Supponiamo che gli hash per tutti i test siano gli stessi. Poiché tutti gli hash sono uguali, l'ordine di esecuzione è basato sull'ordine lessicografico. L'ordine di esecuzione è
- TESTA
- TestB
- TestC
Ordine lessicografico
Utilizzare l'annotazione @FixMethodOrder
con il metodo sorter MethodSorters.NAME_ASCENDING
. Questo eseguirà tutti i test all'interno della classe in un ordine deterministico e prevedibile. L'implementazione confronta i nomi dei metodi e, in caso di parità, confronta i metodi ' toString()
.
Segmento di codice di seguito preso da JUnit Github - MethodSorter.java
public int compare(Method m1, Method m2) {
final int comparison = m1.getName().compareTo(m2.getName());
if(comparison != 0) {
return comparison;
}
return m1.toString().compareTo(m2.toString());
}
Esempio
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTest {
@Test
public void testA() {}
@Test
public void testB() {}
@Test
public void testC() {}
}
L'ordine di esecuzione è
- TESTA
- TestB
- TestC