2016-03-14 42 views
4

testng帶來junit項目作爲傳遞Maven依賴項。它不應該是junit的替代品嗎?爲什麼testng依賴於junit?

mvn dependency:tree

[INFO] +- org.testng:testng:jar:6.9.6:test 
[INFO] | \- junit:junit:jar:4.10:test 
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.1:test 

嚴重的是,爲什麼呢? 這會導致不斷的痛苦,因爲IDE提供了兩種@Test註釋,它們在使用中幾乎完全相同,導致項目中有junit和testng測試。

排除junit傳遞依賴性是否安全?什麼可能會打破?

回答

3

Edwin Buck's答案是正確的,但我想添加一些關於依賴本身的信息。 JUnit是標記爲optional依賴(see the pom):

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.10</version> 
    <optional>true</optional> 
</dependency> 

根據the Maven documentation,這意味着你應該能夠排除的依賴,如果你不需要的功能:

的想法是某些依賴項僅用於項目中的某些功能,如果不使用該功能則不需要。

因此,至少依賴關係被設計爲能夠被排除。

爲了詳細闡述如何連接TestNG和JUnit,您可能需要依賴關係的功能TestNG支持direct execution of Junit tests。根據文檔,這將實施類似於:

<test name="Test1" junit="true"> 
    <classes> 
     <!-- ... --> 
3

因爲testng提供了JUnit集成,因此可以在testng框架內運行JUnit測試。基本上,它被添加爲將測試從「JUnit方式」遷移到「testng方式」的路徑。你可以閱讀更多關於它here

我不知道如果testng將與此集成一起運作刪除;但是,您可以隨時刪除傳遞依賴關係並找出答案。

3

聲明:我是TestNG的貢獻者。

我們在一些版本之前用Gradle替換了Maven,並且我們沒有找到定義可選依賴項的方法。現在它應該被修復,因爲:https://github.com/cbeust/testng/pull/844

這解釋了爲什麼在某些發行版中,您可以將JUnit看作是TestNG的直接依賴項。 但這不是預期的行爲,你可以從類路徑中排除它,沒有問題(如果你不需要它來運行一些JUnit測試)。