gradle入门_Gradle入门:集成测试
gradle入門
因為Java項目的標準項目布局僅定義了一個測試目錄( src / test ),所以我們沒有將集成測試添加到Gradle構建中的標準方法。
如果要使用標準項目布局,則可以使用以下選項之一將集成測試添加到Gradle構建中:
- 我們可以將集成測試添加到與單元測試相同的目錄中。 這是一個可怕的想法,因為集成測試通常比單元測試要慢得多。 如果我們決定使用這種方法,則反饋回路的長度會比應有的要長得多。
- 我們可以創建一個新項目,并將集成測試添加到該項目中。 這沒有任何意義,因為它迫使我們將項目轉換為多項目構建。 另外,如果我們的項目已經是一個多項目構建,那么我們就搞砸了。 當然,我們可以將所有集成測試添加到同一項目中,也可以為每個經過測試的項目創建新的集成測試項目,但是腳踏實地的工作會比較輕松。
顯然,我們需要一種更好的方法 。 這篇博客文章描述了我們如何創建滿足以下要求的Gradle構建:
- 集成測試和單元測試必須具有不同的源目錄。 src / integration-test / java目錄必須包含我們的集成測試的源代碼,而src / test / java目錄必須包含我們的單元測試的源代碼。
- 集成測試和單元測試必須具有單獨的資源目錄。 src / integration-test / resources目錄必須包含我們的集成測試的資源。 src / test / resources目錄必須包含我們的單元測試的資源。
- 我們必須能夠為集成測試配置編譯時和運行時依賴項。
- 我們必須能夠運行我們的單元測試或集成測試。
- 我們必須能夠運行所有測試。
- 如果集成測試失敗,我們的構建也必須失敗。
- 集成測試和單元測試必須具有單獨HTML報告。
讓我們從配置集成測試的源目錄和資源目錄開始。
配置我們的集成測試的源目錄和資源目錄
我們可以使用sourceSets構建腳本塊將新的源和資源目錄添加到Gradle構建中。 有了這些信息,我們可以按照以下步驟配置集成測試的源目錄和資源目錄:
完成后,在存儲庫構建腳本塊之后 ,我們的build.gradle文件應具有以下sourceSets構建腳本塊:
sourceSets {integrationTest {java {compileClasspath += main.output + test.outputruntimeClasspath += main.output + test.outputsrcDir file('src/integration-test/java')}resources.srcDir file('src/integration-test/resources')} }補充閱讀:
- 第23.2節Java插件– Gradle用戶指南的源集
- sourceSets構建腳本塊的DSL參考
- SourceSetOutput的DSL參考
當在命令提示符下運行命令: gradle properties時,我們將看到一長串項目屬性。 與該博客文章相關的屬性如下所示:
> gradle properties :properties------------------------------------------------------------ Root project ------------------------------------------------------------ configurations: [configuration ':archives', configuration ':compile', configuration ':default', configuration ':integrationTestCompile', configuration ':integrationTestRuntime', configuration ':runtime', configuration ':testCompile', configuration ':testRuntime']sourceSets: 1 sources: [Java source 'main:java', JVM resources 'main:resources', Java source 'test:java', JVM resources 'test:resources', Java source 'integrationTest:java', JVM resources 'integrationTest:resources']BUILD SUCCESSFULTotal time: 3.34 secs如我們所見,我們在Gradle構建中添加了新的源和資源目錄。 有趣的是,當我們創建一個新的源集時,Java插件向我們的構建中添加了兩個新的依賴項配置:
- integrationTestCompile配置用于聲明編譯我們的集成測試時所需的依賴項。
- IntegrationTestRuntime配置用于聲明運行我們的集成測試所需的依賴項。 此配置包含添加到integrationTestCompile配置中的所有依賴項。
補充閱讀:
- 第23.5節Java插件– Gradle用戶指南的依賴性管理
讓我們繼續前進,找出在這些依賴項配置對我們有用之前必須進行哪些配置更改。
配置我們的集成測試的依賴性配置
在配置集成測試的源目錄和資源目錄時,我們創建了一個源集,該源集創建了兩個新的依賴項配置: IntegrationTestCompile和IntegrationTestRuntime 。 問題在于這些配置不包含我們的單元測試的依賴項。
我們可以通過向這些配置中添加必需的依賴項來解決此問題,但是由于添加重復的配置是一個糟糕的主意,因此我們不會這樣做。 相反,我們將按照以下步驟配置這些依賴項配置:
我們可以使用配置構建腳本塊進行這些更改。 換句話說,我們必須將下面的代碼添加到sourceSets和依賴關系構建腳本塊之間我們的build.gradle文件:
configurations {integrationTestCompile.extendsFrom testCompileintegrationTestRuntime.extendsFrom testRuntime }補充閱讀:
- Gradle用戶指南的8.3節依賴項配置
- 配置構建腳本塊的DSL參考
- ConfigurationContainer的DSL參考
- 配置的DSL參考
現在,我們可以向這些配置添加依賴項。 例如,如果要在集成測試中使用AssertJ 3.0 ,則必須將assertj-core依賴項添加到integrationTestCompile配置中。 完成此操作后,從build.gradle文件中找到的依賴項構建腳本塊如下所示:
dependencies {compile 'log4j:log4j:1.2.17'testCompile 'junit:junit:4.11'integrationTestCompile 'org.assertj:assertj-core:3.0.0' }補充閱讀:
- Gradle入門:依賴管理
下一步是創建運行集成測試的任務。 讓我們找出如何做到這一點。
創建運行我們的集成測試的任務
我們可以按照以下步驟創建運行集成測試的任務:
通過將以下代碼添加到我們的build.gradle文件中,我們可以創建和配置integrationTest任務:
task integrationTest(type: Test) {testClassesDir = sourceSets.integrationTest.output.classesDirclasspath = sourceSets.integrationTest.runtimeClasspath }補充閱讀:
- 第15.1節《 Gradle用戶指南》中的定義任務
- 任務的DSL參考
我們已經創建了運行集成測試的任務,但是問題是在構建過程中未調用此任務。 因為要將其包含在我們的構建中,所以我們必須遵循以下步驟:
我們可以通過在build.gradle文件中添加以下幾行來進行這些配置更改:
check.dependsOn integrationTest integrationTest.mustRunAfter test補充閱讀:
- 第23.3節Java插件– Gradle任務用戶指南
- 第15.4節為Gradle用戶指南的任務添加依賴項
- Gradle用戶指南的15.5節訂購任務
我們差不多完成了,但是仍然有一個問題。 我們的單元測試和集成測試將其HTML報告創建到同一報告目錄。 這意味著,如果我們同時運行單元測試和集成測試,則只能看到包含集成測試的測試結果HTML報告。
通過將以下代碼段添加到我們的build.gradle文件中,我們可以確保將單元測試和集成測試HTML報告創建到不同的報告目錄:
tasks.withType(Test) {reports.html.destination = file("${reporting.baseDir}/${name}") }這不是我自己的想法。 我是從這個Stackoverflow答案中借用的,它解釋了如何創建用于集成和單元測試的單獨HTML報告。
在將此片段添加到build.gradle文件中之后,我們的單元測試和集成測試將使用它們自己的報告目錄,這些目錄將在下面進行描述:
- build / reports / integrationTest目錄包含HTML報告,該報告包含我們的集成測試的測試結果。
- build / reports / test目錄包含HTML報告,該報告包含我們的單元測試的測試結果。
我們完了! 讓我們繼續前進,找出如何運行測試。
運行我們的測試
現在,我們創建了一個運行集成測試的新任務,并將該任務與Gradle構建集成在一起。 我們終于準備好運行我們的單元和集成測試。 我們的Gradle構建要求指出:
- 我們必須能夠運行唯一的單元測試。
- 我們必須只能運行集成測試。
- 我們必須能夠運行所有測試。
讓我們一一滿足這些要求。
首先 ,如果我們只想運行單元測試,則可以使用以下兩個選項之一:
- 我們可以通過運行以下命令來運行單元測試: gradle clean test在命令提示符處。
- 我們可以通過運行以下命令來運行構建并排除集成測試:在命令提示符下執行gradle clean build -x integrationTest 。
其次 ,如果我們只想運行集成測試,則可以選擇以下選項之一:
- 我們可以通過運行以下命令來運行集成測試: gradle clean IntegrationTest -x在命令提示符下進行測試 。
- 我們可以通過運行以下命令來運行構建并排除單元測試: gradle clean build -x test在命令提示符處。
第三 ,如果要運行所有測試,則可以選擇以下兩個選項之一:
- 我們可以通過運行以下命令來運行單元測試和集成測試: gradle clean IntegrationTest在命令提示符下。
- 我們可以通過運行以下命令來運行構建: gradle clean build在命令提示符處。
補充閱讀:
- 11.2節不包括Gradle用戶用戶指南的任務
讓我們總結一下我們從此博客文章中學到的知識。
摘要
這篇博客文章教會了我們以下幾點:
- 如果我們向構建中添加新的源集,則Java插件會為其創建編譯時間和運行時依賴項配置。
- 我們可以使用Configuration的extendedFrom屬性來包含另一個依賴項配置的依賴項。
- 我們可以通過創建一個新的Test任務,并配置集成測試類和使用的類路徑的位置來創建一個運行集成測試的任務。
- 我們可以向任務添加依賴項,并配置調用任務的順序。
- 我們可以使用-x命令行選項排除任務。
- PS:您可以從Github獲得此博客文章的示例應用程序 。
如果您想學習如何使用Gradle,則應該看一下我的Gradle教程 。
翻譯自: https://www.javacodegeeks.com/2015/05/getting-started-with-gradle-integration-testing.html
gradle入門
總結
以上是生活随笔為你收集整理的gradle入门_Gradle入门:集成测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jboss eap 7.0_是时候抛弃J
- 下一篇: java8 函数式编程_使用Javasl