Junit单元测试执行的顺序

Junit单元测试执行的顺序

  • 我们在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法.
  • 比如如在测试数据库相关的用例时候要按照测试插入、查询、删除的顺序测试。
  • 如果不按照这个顺序测试可能会出现问题,比如删除方法在前面执行,后面的方法就都不能通过测试.
  • 因为数据已经被清空了。而JUnit测试默认的顺序是随机的。所以这时就需要有办法要求JUnit在执行测试方法时按照我们指定的顺序来执行。
  • 按照设计原则,JUnit是不指定测试方法调用执行顺序的。
  • 目前为止,这些方法只是简单地按照反射(reflection) API返回的顺序执行。
  • 但是,使用JVM默认提供的排序是很不明智的,因为Java平台没有指定任何有规律的顺序,
  • 而事实上JDK 7可能会返回一个随机的顺序。
  • 当然,精心编写的测试代码之间并不需要假定任何执行顺序,但有时候,但在某些平台上一个可预测的失败总比随机的失败要好。

  • 本例通过Junit的@FixMethodOrder注解来设定单元测试中方法的执行顺序
  • 可以看到,DefaultOrderTest 和 NotSettingOrderTest 执行结果是一样的
  • JVMOrderTest每次返回不同的结果
  • NameAscOrderTest返回的是按照方法名称的字典序执行的结果

demo如下:

不指定顺序 : 从4.11版本开始,JUnit将默认使用一个确定的,但不可预测的顺序。执行顺序同DefaultOrderTest

public class NotSettingOrderTest {

    @Test
    public void one() {
        System.out.println("1");
    }
    @Test
    public void two() {
        System.out.println("2");
    }
    @Test
    public void three() {
        System.out.println("3");
    }
    @Test
    public void four() {
        System.out.println("4");
    }

    /**
     * 无论执行多少次,结果始终为:
     1
     2
     4
     3
     */
}

MethodSorters.DEFAULT : 默认的顺序执行 执行顺序同NotSettingOrderTest

@FixMethodOrder(MethodSorters.DEFAULT)
public class DefaultOrderTest {
    @Test
    public void one() {
        System.out.println("1");
    }
    @Test
    public void two() {
        System.out.println("2");
    }
    @Test
    public void three() {
        System.out.println("3");
    }
    @Test
    public void four() {
        System.out.println("4");
    }

    /**
     * 每次执行结果都是:
     1
     2
     4
     3
     */
}

MethodSorters.JVM : 保留测试方法的执行顺序为JVM返回的顺序。每次测试的执行顺序有可能会所不同。

@FixMethodOrder(MethodSorters.JVM)
public class JVMOrderTest {
    @Test
    public void one() {
        System.out.println("1");
    }
    @Test
    public void two() {
        System.out.println("2");
    }
    @Test
    public void three() {
        System.out.println("3");
    }
    @Test
    public void four() {
        System.out.println("4");
    }

    /**
     * 每次执行结果都有可能不一样
     */
}

MethodSorters.NAME_ASCENDING : 按照方法名的字典顺序升序执行

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class NameAscOrderTest {
    @Test
    public void one() {
        System.out.println("1");
    }
    @Test
    public void two() {
        System.out.println("2");
    }
    @Test
    public void three() {
        System.out.println("3");
    }
    @Test
    public void four() {
        System.out.println("4");
    }

    /**
     * 无论执行多少次,都是按照方法名字的字典序执行:
     4
     1
     3
     2
     */
}

猜你喜欢

转载自blog.csdn.net/shixuetanlang/article/details/79774148
今日推荐