junit 执行顺序问题
猜猜以下代码的输出结果:
public class JunitOrderTest {
@Test
public void aTest() { System.out.println("a"); }
@Test
public void a1Test() { System.out.println("a1"); }
@Test
public void bTest() { System.out.println("b"); }
@Test
public void cTest() { System.out.println("c"); }
@Test
public void aaTest() { System.out.println("aa"); }
@Test
public void abTest() { System.out.println("ab"); }
}
答案是:
a1
aa
ab
a
b
c
先说结论:junit默认按方法名的按方法名的hashcode排序
若希望junit执行顺序,可在类名上添加注解:@FixMethodOrder
@FixMethodOrder接受MethodSorters枚举值
MethodSorters的具体枚举值有:
- NAME_ASCENDING:按方法名的toString()函数结果排序
- JVM:顺序随机
- DEFAULT:MethodSorters的默认值,junit默认的执行顺序。按方法名的hashcode排序
MethodSorters.NAME_ASCENDING示例
// 按方法名的toString()函数结果排序
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class JunitOrderTest {
@Test
public void aTest() { System.out.println("a"); }
@Test
public void a1Test() { System.out.println("a1"); }
@Test
public void bTest() { System.out.println("b"); }
@Test
public void cTest() { System.out.println("c"); }
@Test
public void aaTest() { System.out.println("aa"); }
@Test
public void a100Test() { System.out.println("a100"); }
@Test
public void abTest() { System.out.println("ab"); }
}
// 输出结果
a100
a1
a
aa
ab
b
c
MethodSorters.JVM示例
// 随机
@FixMethodOrder(MethodSorters.JVM)
public class JunitOrderTest {
@Test
public void aTest() { System.out.println("a"); }
@Test
public void a1Test() { System.out.println("a1"); }
@Test
public void bTest() { System.out.println("b"); }
@Test
public void cTest() { System.out.println("c"); }
@Test
public void aaTest() { System.out.println("aa"); }
@Test
public void abTest() { System.out.println("ab"); }
}
// 输出结果
a
ab
b
c
aa
a1