AFAIK在任何方法之前,構造函數方法由JRE運行。 但在我的情況下,構造函數在測試方法之後運行。junit構造函數運行後測試方法
import org.junit.*;
public class CourseTest {
public CourseTest(){
System.out.println("Constructor");
}
@BeforeClass
public static void beforeClassTest() throws Exception{
System.out.println("beforeClassTest");
}
@AfterClass
public static void afterClassTest() throws Exception{
System.out.println("afterClassTest");
}
@Before
public void beforeTest() throws Exception{
System.out.println("beforeTest");
}
@After
public void afterTest() throws Exception{
System.out.println("afterTest");
}
@Test
public void getCredit() throws Exception {
System.out.println("test 1 is getCredit");
}
@Test
public void getName() throws Exception {
System.out.println("test 2 is getName");
}
}
,其結果是:
beforeTest
test 2 is getName
afterTest
beforeTest
test 1 is getCredit
afterTest
beforeClassTest
Constructor
Constructor
afterClassTest
不僅如此,我的測試案例以相反的順序運行過。 很困惑。 我明白爲什麼構造函數會運行兩次,因爲對於每個測試,都會實例化一個新類。但是如何在構造函數之後運行測試方法?
編輯: 作爲@麥克 - 詹金斯建議,我調試測試類,並在這個順序運行:
1-beforeClassTest
2-Constructor
3-beforeTest
4-test 2 is getName
5-afterTest
6-Constructor
7-beforeTest
8-test 1 is getCredit
9-afterTest
10-afterClassTest
可能無法保證測試的順序,在任何情況下,每個測試用例都應該是獨立的(FIRST原則),所以順序應該不重要。 – MikeJ
JUnit的生命週期方法應該以生殖方式執行。你如何執行你的課程? – davidxxx
這可能只是失序的輸出,它是否總是相同的結果,以及如果爲每個方法添加Thread.sleep會發生什麼? –