讀古今文學網 > Maven實戰 > 10.4 動態指定要運行的測試用例 >

10.4 動態指定要運行的測試用例

反覆運行單個測試用例是日常開發中很常見的行為。例如,項目代碼中有一個失敗的測試用例,開發人員就會想要再次運行這個測試以獲得詳細的錯誤報告,在修復該測試的過程中,開發人員也會反覆運行它,以確認修復代碼是正確的。如果僅僅為了一個失敗的測試用例而反覆運行所有測試,未免太浪費時間了,當項目中測試的數目比較大的時候,這種浪費尤為明顯。

maven-surefire-plugin提供了一個test參數讓Maven用戶能夠在命令行指定要運行的測試用例。例如,如果只想運行account-captcha的RandomGeneratorTest,就可以使用如下命令:

這裡test參數的值是測試用例的類名,這行命令的效果就是只有RandomGeneratorTest這一個測試類得到運行。

maven-surefire-plugin的test參數還支持高級一些的賦值方式,能讓用戶更靈活地指定需要運行的測試用例。例如:

星號可以匹配零個或多個字符,上述命令會運行項目中所有類名以Random開頭、Test結尾的測試類。

除了星號匹配,還可以使用逗號指定多個測試用例:

該命令的test參數值是兩個測試類名,它們之間用逗號隔開,其效果就是告訴Maven只運行這兩個測試類。

當然,也可以結合使用星號和逗號。例如:

需要注意的是,上述幾種從命令行動態指定測試類的方法都應該只是臨時使用,如果長時間只運行項目的某幾個測試,那麼測試就會慢慢失去其本來的意義。

test參數的值必須匹配一個或者多個測試類,如果maven-surefire-plugin找不到任何匹配的測試類,就會報錯並導致構建失敗。例如下面的命令沒有匹配任何測試類:

這樣的命令會導致構建失敗,輸出如下:

根據錯誤提示可以加上-DfailIfNoTests=false,告訴maven-surefire-plugin即使沒有任何測試也不要報錯:

這樣構建就能順利執行完畢了。可以發現,實際上使用命令行參數-Dtest-DfailIfNoTests=false是另外一種跳過測試的方法。

我們看到,使用test參數用戶可以從命令行靈活地指定要運行的測試類。可惜的是,maven-surefire-plugin並沒有提供任何參數支持用戶從命令行跳過指定的測試類,好在用戶可以通過在POM中配置maven-surefire-plugin排除特定的測試類。