日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Gradle入门:集成测试

發(fā)布時(shí)間:2023/12/3 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gradle入门:集成测试 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

因?yàn)镴ava項(xiàng)目的標(biāo)準(zhǔn)項(xiàng)目布局僅定義了一個(gè)測(cè)試目錄( src / test ),所以我們沒(méi)有將集成測(cè)試添加到Gradle構(gòu)建中的標(biāo)準(zhǔn)方法。

如果要使用標(biāo)準(zhǔn)項(xiàng)目布局,則可以使用以下選項(xiàng)之一將集成測(cè)試添加到Gradle構(gòu)建中:

  • 我們可以將集成測(cè)試添加到與單元測(cè)試相同的目錄中。 這是一個(gè)糟糕的主意,因?yàn)榧蓽y(cè)試通常比單元測(cè)試慢很多。 如果我們決定使用這種方法,則反饋循環(huán)的長(zhǎng)度比應(yīng)該的要長(zhǎng)得多。
  • 我們可以創(chuàng)建一個(gè)新項(xiàng)目,并將集成測(cè)試添加到該項(xiàng)目中。 這沒(méi)有任何意義,因?yàn)樗仁刮覀儗㈨?xiàng)目轉(zhuǎn)換為多項(xiàng)目構(gòu)建。 另外,如果我們的項(xiàng)目已經(jīng)是多項(xiàng)目構(gòu)建,那么我們就被搞砸了。 當(dāng)然,我們可以將所有集成測(cè)試添加到同一項(xiàng)目中,也可以為每個(gè)經(jīng)過(guò)測(cè)試的項(xiàng)目創(chuàng)建新的集成測(cè)試項(xiàng)目,但是腳踏實(shí)地的工作會(huì)比較輕松。

顯然,我們需要一種更好的方法 。 這篇博客文章描述了我們?nèi)绾蝿?chuàng)建滿足以下要求的Gradle構(gòu)建:

  • 集成測(cè)試和單元測(cè)試必須具有不同的源目錄。 src / integration-test / java目錄必須包含我們的集成測(cè)試的源代碼,而src / test / java目錄必須包含我們的單元測(cè)試的源代碼。
  • 集成測(cè)試和單元測(cè)試必須具有單獨(dú)的資源目錄。 src / integration-test / resources目錄必須包含我們的集成測(cè)試的資源。 src / test / resources目錄必須包含我們的單元測(cè)試的資源。
  • 我們必須能夠?yàn)榧蓽y(cè)試配置編譯時(shí)和運(yùn)行時(shí)依賴項(xiàng)。
  • 我們必須能夠運(yùn)行我們的單元測(cè)試或集成測(cè)試。
  • 我們必須能夠運(yùn)行所有測(cè)試。
  • 如果集成測(cè)試失敗,我們的構(gòu)建也必須失敗。
  • 集成測(cè)試和單元測(cè)試必須具有單獨(dú)HTML報(bào)告。

讓我們從配置集成測(cè)試的源目錄和資源目錄開(kāi)始。

配置我們的集成測(cè)試的源目錄和資源目錄

我們可以使用sourceSets構(gòu)建腳本塊將新的源和資源目錄添加到Gradle構(gòu)建中。 有了這些信息,我們可以按照以下步驟配置集成測(cè)試的源目錄和資源目錄:

  • 創(chuàng)建一個(gè)名為IntegrationTest的新源集。
  • 確保將主源集和測(cè)試源集的輸出添加到編譯時(shí)類路徑中。
  • 確保將主要和測(cè)試源集的輸出添加到運(yùn)行時(shí)類路徑。
  • 將我們的集成測(cè)試的源目錄設(shè)置為src / integration-test / java 。
  • 將集成測(cè)試的資源目錄設(shè)置為src / integration-test / resources 。
  • 完成后,在存儲(chǔ)庫(kù)構(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í),我們將看到一長(zhǎng)串項(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

    如我們所見(jiàn),我們?cè)贕radle構(gòu)建中添加了新的源和資源目錄。 有趣的是,當(dāng)我們創(chuàng)建一個(gè)新的源集時(shí),Java插件向我們的構(gòu)建中添加了兩個(gè)新的依賴項(xiàng)配置:

    • IntegrationTestCompile配置用于聲明編譯我們的集成測(cè)試時(shí)所需的依賴項(xiàng)。
    • IntegrationTestRuntime配置用于聲明運(yùn)行我們的集成測(cè)試所需的依賴項(xiàng)。 此配置包含添加到integrationTestCompile配置中的所有依賴項(xiàng)。

    補(bǔ)充閱讀:

    • 第23.5節(jié)Java插件– Gradle用戶指南的依賴性管理

    讓我們繼續(xù)前進(jìn),找出在這些依賴項(xiàng)配置對(duì)我們有用之前必須進(jìn)行哪些配置更改。

    配置我們的集成測(cè)試的依賴項(xiàng)配置

    在配置集成測(cè)試的源目錄和資源目錄時(shí),我們創(chuàng)建了一個(gè)源集,該源集創(chuàng)建了兩個(gè)新的依賴項(xiàng)配置: IntegrationTestCompile和IntegrationTestRuntime 。 問(wèn)題在于這些配置不包含我們的單元測(cè)試的依賴項(xiàng)。

    我們可以通過(guò)向這些配置中添加所需的依賴項(xiàng)來(lái)解決此問(wèn)題,但是由于添加重復(fù)的配置是一個(gè)糟糕的主意,因此我們不會(huì)這樣做。 相反,我們將按照以下步驟配置這些依賴項(xiàng)配置:

  • 確保IntegrationTestCompile配置包含編譯我們的單元測(cè)試所需的依賴項(xiàng)。
  • 確保IntegrationTestRuntime配置包含運(yùn)行我們的單元測(cè)試所需的依賴項(xiàng)。
  • 我們可以使用配置構(gòu)建腳本塊進(jìn)行這些更改。 換句話說(shuō),我們必須將下面代碼添加到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)。 例如,如果要在集成測(cè)試中使用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)行集成測(cè)試的任務(wù)。 讓我們找出如何做到這一點(diǎn)。

    創(chuàng)建運(yùn)行我們的集成測(cè)試的任務(wù)

    我們可以按照以下步驟創(chuàng)建運(yùn)行集成測(cè)試的任務(wù):

  • 創(chuàng)建一個(gè)名為IntegrationTest的新任務(wù),并將其類型設(shè)置為Test 。
  • 配置已編譯測(cè)試類的位置。
  • 配置運(yùn)行我們的集成測(cè)試時(shí)使用的類路徑。
  • 通過(guò)將以下代碼添加到我們的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)行集成測(cè)試的任務(wù),但是問(wèn)題是在構(gòu)建期間未調(diào)用此任務(wù)。 因?yàn)橐獙⑵浒谖覀兊臉?gòu)建中,所以我們必須遵循以下步驟:

  • 確保集成測(cè)試在檢查任務(wù)之前運(yùn)行,并且如果集成測(cè)試失敗,則檢查任務(wù)會(huì)使構(gòu)建失敗。
  • 確保在集成測(cè)試之前運(yùn)行我們的單元測(cè)試。 即使我們的集成測(cè)試失敗,這也可以確保我們的單元測(cè)試得以運(yùn)行。
  • 我們可以通過(guò)將以下行添加到build.gradle文件中來(lái)進(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é)訂購(gòu)任務(wù)

    我們差不多完成了,但是仍然有一個(gè)問(wèn)題。 我們的單元測(cè)試和集成測(cè)試將它們HTML報(bào)告創(chuàng)建到同一報(bào)告目錄。 這意味著,如果我們同時(shí)運(yùn)行單元測(cè)試和集成測(cè)試,則只能看到包含集成測(cè)試的測(cè)試結(jié)果HTML報(bào)告。

    通過(guò)將以下代碼段添加到我們的build.gradle文件中,我們可以確保將單元測(cè)試和集成測(cè)試HTML報(bào)告創(chuàng)建到不同的報(bào)告目錄:

    tasks.withType(Test) {reports.html.destination = file("${reporting.baseDir}/${name}") }

    這不是我自己的想法。 我是從這個(gè)Stackoverflow答案中借用的,它解釋了如何創(chuàng)建用于集成和單元測(cè)試的單獨(dú)HTML報(bào)告。

    在將此片段添加到build.gradle文件中之后,我們的單元測(cè)試和集成測(cè)試將使用它們自己的報(bào)告目錄,這些報(bào)告目錄如下所述:

    • build / reports / integrationTest目錄包含HTML報(bào)告,該報(bào)告包含我們的集成測(cè)試的測(cè)試結(jié)果。
    • build / reports / test目錄包含HTML報(bào)告,該報(bào)告包含我們的單元測(cè)試的測(cè)試結(jié)果。

    我們完了! 讓我們繼續(xù)前進(jìn),找出如何運(yùn)行測(cè)試。

    運(yùn)行我們的測(cè)試

    現(xiàn)在,我們創(chuàng)建了一個(gè)運(yùn)行集成測(cè)試的新任務(wù),并將該任務(wù)與Gradle構(gòu)建集成在一起。 我們終于準(zhǔn)備好運(yùn)行我們的單元和集成測(cè)試。 我們的Gradle構(gòu)建要求指出:

    • 我們必須能夠運(yùn)行唯一的單元測(cè)試。
    • 我們必須只能運(yùn)行集成測(cè)試。
    • 我們必須能夠運(yùn)行所有測(cè)試。

    讓我們一一滿足這些要求。

    首先 ,如果我們只想運(yùn)行單元測(cè)試,則可以使用以下兩個(gè)選項(xiàng)之一:

    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行單元測(cè)試: gradle clean test在命令提示符處。
    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行構(gòu)建并排除集成測(cè)試:在命令提示符下執(zhí)行g(shù)radle clean build -x integrationTest 。

    其次 ,如果我們只想運(yùn)行集成測(cè)試,則可以選擇以下選項(xiàng)之一:

    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行集成測(cè)試: gradle clean integrationTest -x在命令提示符下進(jìn)行測(cè)試 。
    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行構(gòu)建并排除單元測(cè)試: gradle clean build -x test在命令提示符處。

    第三 ,如果要運(yùn)行所有測(cè)試,我們可以選擇以下兩個(gè)選項(xiàng)之一:

    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行單元測(cè)試和集成測(cè)試: gradle clean IntegrationTest在命令提示符下。
    • 我們可以通過(guò)運(yùn)行以下命令來(lái)運(yùn)行構(gòu)建: gradle clean build在命令提示符處。

    補(bǔ)充閱讀:

    • 11.2節(jié)不包括Gradle用戶用戶指南的任務(wù)

    讓我們總結(jié)一下我們從此博客文章中學(xué)到的知識(shí)。

    摘要

    這篇博客文章告訴我們以下內(nèi)容:

    • 如果我們向構(gòu)建中添加新的源集,則Java插件會(huì)為其創(chuàng)建編譯時(shí)間和運(yùn)行時(shí)依賴項(xiàng)配置。
    • 我們可以使用Configuration的extendedFrom屬性來(lái)包含另一個(gè)依賴項(xiàng)配置的依賴項(xiàng)。
    • 我們可以通過(guò)創(chuàng)建一個(gè)新的Test任務(wù),并配置集成測(cè)試類和使用的類路徑的位置來(lái)創(chuàng)建一個(gè)運(yùn)行集成測(cè)試的任務(wù)。
    • 我們可以向任務(wù)添加依賴項(xiàng),并配置調(diào)用任務(wù)的順序。
    • 我們可以使用-x命令行選項(xiàng)排除任務(wù)。
    • PS:您可以從Github獲得此博客文章的示例應(yīng)用程序 。

    如果您想學(xué)習(xí)如何使用Gradle,請(qǐng)閱讀我的Gradle教程 。

    翻譯自: https://www.javacodegeeks.com/2015/05/getting-started-with-gradle-integration-testing.html

    總結(jié)

    以上是生活随笔為你收集整理的Gradle入门:集成测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。