java单元测试类指定⽅法执⾏顺序
java 单元测试类指定⽅法执⾏顺序
1. MethodSorters.DEFAULT
默认顺序由⽅法名hashcode值来决定,如果hash值⼤⼩⼀致,则按名字的字典顺序确定
由于hashcode的⽣成和操作系统相关(以native修饰),所以对于不同操作系统,可能会出现不⼀样的执⾏顺序,在某⼀操作系统上,多次执⾏的顺序不变
1/**
2    * DEFAULT sort order
3    */
4    public static Comparator<Method> DEFAULT = new Comparator<Method>() {
5        public int compare(Method m1, Method m2) {
6            int i1 = m1.getName().hashCode();
7            int i2 = m2.getName().hashCode();
8            if (i1 != i2) {
9                return i1 < i2 ? -1 : 1;
10            }
11            return NAME_ASCENDINGpare(m1, m2);
12        }
13    };
2. MethodSorters.NAME_ASCENDING (推荐)
按⽅法名称的进⾏排序,由于是按字符的字典顺序,所以以这种⽅式指定执⾏顺序会始终保持⼀致;
不过这种⽅式需要对测试⽅法有⼀定的命名规则,如 测试⽅法均以testNNN开头(NNN表⽰测试⽅法序列号 001-999)
1/**
2    * Method name ascending lexicographic sort order, with {@link Method#toString()} as a tiebreaker
3    */
4    public static Comparator<Method> NAME_ASCENDING = new Comparator<Method>() {
5        public int compare(Method m1, Method m2) {
java的tostring方法
6            final int comparison = m1.getName()Name());
7            if (comparison != 0) {
8                return comparison;
9            }
10            String()String());
11        }
12    };
3. MethodSorters.JVM
按JVM返回的⽅法名的顺序执⾏,此种⽅式下测试⽅法的执⾏顺序是不可预测的,即每次运⾏的顺序可能都不⼀样(JDK7⾥尤其如此). Samples
以下是对Win7 - JDK7 - Junit4.11 的执⾏结果
1//@FixMethodOrder(MethodSorters.DEFAULT)
2//@FixMethodOrder(MethodSorters.NAME_ASCENDING)
3@FixMethodOrder(MethodSorters.JVM)
4public class TestJunitOrder {
5
6    @Test
7    public void test003Third() {
8
9        System.out.println("test003Third");
10    }
11
12    @Test
13    public void test001First() {
14
15        System.out.println("test001First");
16    }
17
18    @Test
19    public void test002Second() {
20
21        System.out.println("test002Second");
22    }
23}
实际上 Junit⾥是通过反射机制得到某个Junit⾥的所有测试⽅法,并⽣成⼀个⽅法的数组,然后依次执⾏数组⾥的这些测试⽅法; ⽽当⽤annotation指定了执⾏顺序,Junit在得到测试⽅法的数组后,会根据指定的顺序对数组⾥的⽅法进⾏排序;
1    import org.junit.FixMethodOrder;
2    import org.junit.Test;
3    import org.junit.runners.MethodSorters;
4
5    @FixMethodOrder(MethodSorters.NAME_ASCENDING)
6    public class OrderedTestCasesExecution {
7        @Test
8        public void test001First() {
9            System.out.println("Executing first test");
10
11        }
12
13        @Test
14        public void test002Second() {
15
16            System.out.println("Executing second test");
17        }
18
19        @Test
20        public void test003Third() {
21            System.out.println("Executing third test");
22        }
23    }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。