junit
Testausführungsreihenfolge
Suche…
Syntax
- @FixMethodOrder // Führt den Test mit dem Standardmethoden-Sortierer aus
- @FixMethodOrder (MethodSorters) // Führt den Test mit MethodSorter aus, der der MethodSorters-Enum zugeordnet ist.
Standardreihenfolge
Verwenden Sie die Annotation - @FixMethodOrder(MethodSorters.DEFAULT)
. Dadurch werden alle Tests in der Klasse in einer deterministischen und etwas vorhersagbaren Reihenfolge ausgeführt. Die Implementierung hasch die Methodennamen und vergleicht sie. Im Szenario einer Krawatte wird nach lexikografischer Reihenfolge sortiert.
Aus JUnit Github entnommenes Codesegment - 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);
}
Beispiel
@FixMethodOrder(MethodSorters.DEFAULT)
public class OrderedTest {
@Test
public void testA() {}
@Test
public void testB() {}
@Test
public void testC() {}
}
Angenommen Hashes für testA
, testB
und testC
sind 3, 2 und 1 sind. Dann ist die Ausführungsreihenfolge
- testC
- testB
- testA
Angenommen, die Hashwerte für alle Tests sind gleich. Da alle Hashes gleich sind, basiert die Ausführungsreihenfolge auf der lexikografischen Reihenfolge. Die Ausführungsreihenfolge ist
- testA
- testB
- testC
Lexikographische Reihenfolge
Verwenden Sie die Annotation @FixMethodOrder
mit dem Methodensortierer MethodSorters.NAME_ASCENDING
. Dadurch werden alle Tests innerhalb der Klasse in einer deterministischen und vorhersagbaren Reihenfolge ausgeführt. Die Implementierung vergleicht die Methodennamen und im Falle eines Gleichstands vergleicht sie die Methoden toString()
.
Aus JUnit Github entnommenes Codesegment - 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());
}
Beispiel
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTest {
@Test
public void testA() {}
@Test
public void testB() {}
@Test
public void testC() {}
}
Die Ausführungsreihenfolge ist
- testA
- testB
- testC