Java測試用例簡介


 

 最近需要向組內其他成員普及一下關於Java測試用例的相關知識,特在此進行一下簡單的學習和總結。

JUnit簡介

JUnit是一個開源的Java單元測試框架,JUnit4對原有的JUnit框架進行了大幅度的改進,主要目標便是利用了Java中的Annotation,來代替以前必須要繼承AbstractTestCase,以及要測試的方法名稱必須test為前綴。

 

JUnit4中提供了三個Annotation,用來控制整個測試的生命周期:

 

  • @Before

相當與測試用例的初始化工作,在執行每個測試用例方法時,都會先執行該方法。

  • @After

測試用例的清理工作在該方法中編寫,在每個方法執行完成后,都會進行清理。

 

@Before和@After可以保證一些測試用例中的資源在這些方法執行,不會受到@Test方法執行順序的影響。

 

  • @Test

這個是實際的測試方法,會根據該方法中的斷言語句(Assert)來進行測試用例的執行結果顯示輸出。

 

在@Test中,還有一些屬性,這些屬性都是非常有用的:

  • expect=xxxx.class(extends Throwable)

如果我們在測試方法中能夠預料到一些錯誤的發生,就使用該方法進行處理。有時候,一個函數拋出異常也許是你希望得到的結果。

 

 

  • timeout=xxxx(一個毫秒值)

如果測試方法沒有在指定的timeout時間內執行完成,該測試失敗,這對於單元測試效率非常有幫助。

 

如果正在實踐測試驅動開發,@Ignore可以暫時忽略掉一些已經定義但並沒有實現的方法。

 

JUnit中有參數化測試的概念,只需要寫一個測試函數,把若干種情況當成是參數傳進去,進行測試即可。

 類似下面的代碼,就可以參數化的方式進行批量測試工作:

 

 

@RunWith(Parameterized.class)
public class BelongToRegionFunctionTestCase {
 
    private BelongToRegionFunction function;
 
    private boolean expected;
    private int regionId;
    private int parentRegionId;
 
    @Before
    public void setUp() {
        function = new BelongToRegionFunction();
    }
 
    @After
    public void tearDown() {
        function = null;
    }
 
    @Parameterized.Parameters
    public static Collection prepareData() {
        return Arrays.asList(
                new Object[]{true, 15, 8},
                new Object[]{true, 105, 8},
                new Object[]{false, 2, 8}
        );
    }
 
    public BelongToRegionFunctionTestCase(boolean expected, int regionId, int parentRegionId) {
        this.expected = expected;
        this.regionId = regionId;
        this.parentRegionId = parentRegionId;
    }
 
    @Test
    public void testOldRegion() throws IOException {
        String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-new").getFile();
        Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
    }
 
    @Test
    public void testNewRegion() throws IOException {
        String filePath = this.getClass().getClassLoader().getResource("Region-000000000000000000000008-top100-top100-top100-merge").getFile();
        Assert.assertEquals(expected, function.evaluate(regionId,parentRegionId, filePath));
    }
 
}
 

 

 

 

Maven中運行JUnit

Maven本身不是一個單元測試框架,只是在構建執行到特定生命周期的時候,通過插件來執行JUnit的測試用例。這個插件就是maven-surefire-plugin,也成為Test Runner。

 

默認情況下,maven-surefire-plugin會執行測試源代碼路徑中的所有TestCase,路徑為:src/test/java。maven中的test階段是默認包含在一些階段之前,也就是說package和install階段都會默認先執行test,如果想要在package前跳過這個階段,可以使用類似下面的命令:

 

maven package –DskipTests
  

 

如果不僅想要跳過測試運行,還需要跳過測試編譯:

 

maven package –Dmaven.test.skip=true
  

 

如果在運行時某個測試用例執行失敗,想要重新執行一次的時候,沒有必要將所有的測試用例都跑一遍,僅需要執行部分的測試用例,maven-surefire-plugin提供了一個test參數可以讓maven用戶能夠在命令行指定要運行的測試用例,可以使用通配符,以及加入多個Test類:

 

maven test –Dtest=Class*Test,Class2*Test
 

 在idea中可以設置工程的Test Resources Folder,這樣就可以在程序中用ClassLoader的getResource得到對應資源的路徑和輸入流,建議不要將測試使用的資源強行防至到對應的開發資源包中。

 

maven中可以定義測試資源的路徑:

 

    <build>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
            </testResource>
        </testResources>
    </build>
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM