java test教學 test - 如何在JUnit4中按特定順序運行測試方法?




8 Answers

我認為這對JUnit來說非常重要,如果JUnit的作者不想要訂單功能,為什麼?

我不確定是否有一種干淨的方式來與JUnit做到這一點,據我所知,JUnit假定所有測試都可以以任意順序執行。 從FAQ:

我如何使用測試夾具?

(...) 不保證測試方法調用的順序,因此可以在testEmptyCollection()之前執行testOneItemCollection()。 (......)

為什麼這樣? 那麼,我認為讓測試順序依賴是一個作者不想提倡的做法。 測試應該是獨立的,不應該被耦合,並且違反這些會使事情變得更難以維護,會打破單獨(顯然)運行測試的能力等等。

話雖如此,如果你真的想要朝這個方向前進,考慮使用TestNG,因為它支持以任意順序在本地運行測試方法(以及諸如指定方法取決於方法組之類的事情)。 Cedric Beust解釋瞭如何在testng中執行測試的順序 。

framework tutorial

我想執行由@Test按特定順序註釋的測試方法。

例如:

public class MyTest {
    @Test public void test1(){}
    @Test public void test2(){}
}

我希望確保每次運行MyTest時在test2() test1()之前運行test1() ,但我找不到像@Test(order=xx)這樣的註釋。

我認為這對JUnit來說非常重要,如果JUnit的作者不想要訂單功能 ,為什麼?




如果您擺脫了您現有的Junit實例,並且在構建路徑中下載JUnit 4.11或更高版本,則以下代碼將按其名稱順序執行測試方法,並按升序排序:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void testAcreate() {
        System.out.println("first");
    }
    @Test
    public void testBupdate() {
        System.out.println("second");
    }
    @Test
    public void testCdelete() {
        System.out.println("third");
    }
}



遷移到TestNG似乎是最好的方式,但我在這裡看不到有關jUnit的明確解決方案。 這裡是我為jUnit找到的最可讀的解決方案/格式

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {
    @Test
    void stage1_prepareAndTest(){};

    @Test
    void stage2_checkSomething(){};

    @Test
    void stage2_checkSomethingElse(){};

    @Test
    void stage3_thisDependsOnStage2(){};

    @Test
    void callTimeDoesntMatter(){}
}

這確保stage2方法在stage1之後和stage3之前被調用。







當測試用例作為套件運行時,你想要的是完全合理的。

不幸的是,現在沒有時間提供完整的解決方案,而是看看課堂:

org.junit.runners.Suite

它允許你以特定的順序調用測試用例(來自任何測試類)。

這些可能被用來創建功能,集成或系統測試。

這會讓你的單元測試沒有特定的順序(如推薦的那樣),無論你是否運行它們,然後重新使用測試作為更大圖片的一部分。

我們對單元,集成和系統測試重用/繼承相同的代碼,有時是數據驅動的,有時是提交驅動的,有時會作為套件運行。




在這裡看到我的解決方案:“Junit和Java 7”。

在本文中,我將介紹如何按順序運行junit測試 - “就像在源代碼中一樣”。 測試將運行,以便您的測試方法出現在類文件中。

http://intellijava.blogspot.com/2012/05/junit-and-java-7.html

但正如Pascal Thivent所說,這不是一個好習慣。







我最終在這裡認為我的測試沒有按順序運行,但事實是,混亂是在我的異步工作。 在使用並發時,您還需要在測試之間執行並發檢查。 就我而言,作業和測試共享一個信號量,所以下一個測試會掛起,直到正在運行的作業釋放鎖定。

我知道這與這個問題沒有完全相關,但也許可以幫助確定正確的問題




Related