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