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