Test execution order – JUnit 4.X

I want to execute test methods which are annotated by @Test in specific order.

For example:

public class MyTest{
    @Test public void create(){System.out.println("create");}
    @Test public void update(){System.out.println("update");}
    @Test public void delete(){System.out.println("delete");}
}

I want to ensure to run create() before update() and updatebefore delete each time I run MyTest.

The test execution order i would like to get is,

    create
    update
    delete

Test execution order

By design, JUnit does not specify the execution order of test method invocations. Until now, the methods were simply invoked in the order returned by the reflection API. However, using the JVM order is unwise since the Java platform does not specify any particular order, and in fact JDK 7 returns a more or less random order. Of course, well-written test code would not assume any order, but some does, and a predictable failure is better than a random failure on certain platforms.

From version 4.11, JUnit will by default use a deterministic, but not predictable, order (MethodSorters.DEFAULT). To change the test execution order simply annotate your test class using @FixMethodOrder and specify one of the available MethodSorters:

@FixMethodOrder(MethodSorters.JVM): Leaves the test methods in the order returned by the JVM. This order may vary from run to run.

@FixMethodOrder(MethodSorters.NAME_ASCENDING): Sorts the test methods by method name, in lexicographic order.

package com.vel.qa.tests.detailedtests;

import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {
	@Test
	public void aCreate() {
		System.out.println("create");
	}

	@Test
	public void bUpdate() {
		System.out.println("update");
	}

	@Test
	public void cDelete() {
		System.out.println("delete");
	}
}

This would produce the output as i wanted.

Leave a comment