JUnit Aufrufreihenfolge ermitteln

Michael Feather definiert genau, was ein Unit-Test ist:

A test is not a unit test if:

  • It talks to the database
  • It communicates across the network
  • It touches the file system
  • It can’t run at the same time as any of your other unit test

Daraus folgt, dass ein Unit-Test vollständig unabhängig ist und vor allem auch die Reihenfolge der Tests in einer Test-Suite unabhängig sein sollte. Ich benutze JUnit und Mockito für Tests und schreibe auch Integrationstests mit JUnit. Da habe ich manchmal Situationen, wo es einfacher wäre ein Test würde ich einer Suite sequentiell in einer bestimmten Reihenfolge ausgeführt werden.

Seit 4.11: JUnit Aufrufreihenfolge definieren

Seit JUnit 4.11 gibt es die Annotation @FixMethodOrder. Allerdings gibt es nur zwei Möglichkeiten zu sortieren: JVM oder Alphabetisch.

Default meint: Die Reihenfolge wird von der JVM bestimmt kann demnach von Lauf zu Lauf variieren.

Alphabetisch ist die einzigen Möglichkeit die Reihenfolge zu verändern. Tests die am Ende ausgeführt werden sollen müssen dann mit z beginnen.


@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestMethodOrder {

  @Test
  public void testA() {
    System.out.println("first");
  }
  @Test 
  public void testB() {
    System.out.println("second");
  }
  @Test
  public void testC() {
    System.out.println("third");
  }
}

 

 

Ein Gedanke zu „JUnit Aufrufreihenfolge ermitteln

  • 26. Dezember 2015 um 8:58
    Permalink

    It would certainly be uufsel to have parameterized test methods, but passing string properties to the test is not really it as there is no real benefit over acquiring the values at the beginning of the test.IMO it would provide much more value (and is still understandable) if a test framework would support something like:public void testSomeDBStuff(DataSource ds) {// check something against the database }and the framework supplies the datasource from somewhere. The point here is that to understand the test it is not important how and where the datasource is acquired, but only what the test does with it. And IMO there is no need for annotations here, plain IoC usage or similar would probably suffice.

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

%d Bloggern gefällt das: