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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java EE,Gradle和集成测试

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

在過去的幾年中,Apache Maven已成為Java和Java EE項(xiàng)目的事實(shí)上的構(gòu)建工具。 但是從兩年前開始, Gradle便獲得了越來越多的用戶。 在我之前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html )之后,在這篇文章中,您將看到如何使用Gradle使用Java EE編寫集成測試Arquillian 。

Gradle是類似于Ant或Maven的構(gòu)建自動化工具,但是引入了基于Groovy的DSL語言而不是XML。 因此,您可能希望生成文件是Groovy文件。 您可以閱讀我以前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html ),了解如何安裝Gradle 。

為了編寫Java EE的集成測試,事實(shí)上的工具是Arquillan。 如果您想了解Arquillian是什么,可以在( http://arquillian.org/guides/getting_started/ )或《 Arquillian In Action》一書中獲得《入門指南》 。

要開始使用Arquillian ,您需要添加Arquillian依賴項(xiàng),它以BOM的形式出現(xiàn)。 Gradle不支持現(xiàn)成的BOM人工制品,但是您可以使用dependency-management-plugin Gradle插件來支持定義BOM 。

而且Gradle提供了添加除默認(rèn)源之外的更多測試源集的可能性,在Maven中,默認(rèn)源集是src / test / java和src / test / resources 。 這個(gè)想法是,您可以定義一個(gè)新的測試源集,以將所有集成測試放入其中。 通過這種方法,每種測試都可以清楚地分為不同的源集。 您可以在Gradle腳本中編寫Groovy代碼來實(shí)現(xiàn)此目的,也可以只使用gradle-testsets-plugin ,這是最簡單的方法。

因此,要注冊這兩個(gè)插件(依賴項(xiàng)和測試集),您需要在build.gradle腳本文件中添加下一個(gè)元素:

buildscript {repositories {jcenter()}dependencies {classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE"classpath 'org.unbroken-dome.gradle-plugins:gradle-testsets-plugin:1.2.0'} }apply plugin: "io.spring.dependency-management" apply plugin: 'org.unbroken-dome.test-sets'

現(xiàn)在該添加Arquillian依賴項(xiàng)了。 您需要添加Arquillian BOM和兩個(gè)依賴關(guān)系,一個(gè)依賴關(guān)系設(shè)置我們將Arquillian與JUnit一起使用,另一個(gè)依賴關(guān)系將Apache TomEE應(yīng)用程序服務(wù)器設(shè)置為在測試運(yùn)行期間部署應(yīng)用程序的目標(biāo)。

用的Arquillian,TomEE和Java EE的依賴可能看起來像的build.gradle:

dependencyManagement {imports {mavenBom 'org.arquillian:arquillian-universe:1.0.0.Alpha1'} }dependencies {testCompile group: 'org.arquillian.universe', name: 'arquillian-junit', ext: 'pom'testCompile group: 'org.apache.openejb', name: 'arquillian-tomee-embedded', version:'1.7.2'testCompile group: 'junit', name: 'junit', version:'4.12'providedCompile group: 'org.apache.openejb',name: 'javaee-api', version:'6.0-6'}

最后,您可以通過添加下一部分將新的集成測試文件夾配置為源集:

testSets {integrationTests }

其中integrationTest是測試集的名稱。 testSets自動創(chuàng)建并配置下一個(gè)元素:

  • src / integrationTests / java和src / integrationTests / resources作為有效的源集文件夾。
  • 名為integrationTestsCompile依賴關(guān)系配置,其從testCompile延伸,另一種稱為integrationTestRuntime從testRuntime延伸。
  • 一個(gè)名為integrationTests的Test任務(wù),它將運(yùn)行集中的測試。
  • 一個(gè)名為IntegrationTestsJar的Jar任務(wù),用于打包測試。

請注意,您可以將IntegrationTests更改為任何其他值,例如intTests,并且Gradle會將先前的元素自動配置為在testSets中設(shè)置的值(例如src / intTests / java) ,例如,測試任務(wù)將稱為intTests 。

下一步是在IntegrationTests測試集中使用Arquillian創(chuàng)建集成測試。 例如,用于驗(yàn)證您可以在REST API中發(fā)布顏色并在調(diào)用GET方法時(shí)將其返回的Arquillian測試如下所示:

@RunWith(Arquillian.class) public class ColorServiceIntegrationTest {@Deploymentpublic static WebArchive createDeployment() {return ShrinkWrap.create(WebArchive.class).addClasses(ColorService.class);}@ArquillianResourceprivate URL webappUrl;@Test @RunAsClientpublic void postAndGet() throws Exception {// POST{final WebClient webClient = WebClient.create(webappUrl.toURI());final Response response = webClient.path("color/green").post(null);assertThat(response.getStatus(), is(204));}// GET{final WebClient webClient = WebClient.create(webappUrl.toURI());final Response response = webClient.path("color").get();assertThat(response.getStatus(), is(200));final String content = slurp((InputStream) response.getEntity());assertThat(content, is("green"));}}public static String slurp(final InputStream in) throws IOException {final ByteArrayOutputStream out = new ByteArrayOutputStream();final byte[] buffer = new byte[1024];int length;while ((length = in.read(buffer)) != -1) {out.write(buffer, 0, length);}out.flush();return new String(out.toByteArray());}}

您現(xiàn)在可以通過簡單地執(zhí)行g(shù)radlew integrationTests來運(yùn)行集成測試

您會注意到,如果您運(yùn)行g(shù)radlew build ,那么集成測試任務(wù)將不會運(yùn)行。 發(fā)生這種情況是因?yàn)槲丛谀J(rèn)的構(gòu)建生命周期內(nèi)注冊任務(wù)。 如果要添加IntegrationTests任務(wù)以在構(gòu)建期間自動執(zhí)行,則需要添加下一行:

check.dependsOn integrationTestintegrationTest.mustRunAfter test

確保集成測試在檢查任務(wù)之前運(yùn)行,并且如果集成測試失敗,則檢查任務(wù)會使構(gòu)建失敗,并確保在集成測試之前運(yùn)行單元測試。 這樣可以確保即使集成測試失敗也可以運(yùn)行單元測試。

因此,現(xiàn)在當(dāng)您運(yùn)行g(shù)radlew build , gradlew build執(zhí)行集成測試。

最后,如果您正在運(yùn)行JaCoCo插件進(jìn)行代碼覆蓋會發(fā)生什么? 您將獲得兩個(gè)JaCoCo文件,一個(gè)用于單元測試執(zhí)行,另一個(gè)用于IntegrationTests執(zhí)行。 但是,您可能希望看到兩者的匯總代碼覆蓋率報(bào)告都運(yùn)行在一個(gè)文件中,因此您可以在執(zhí)行各種測試后檢查應(yīng)用程序的代碼覆蓋率。 要實(shí)現(xiàn)它,您只需要添加下一個(gè)任務(wù):

task jacocoRootTestReport(type: JacocoReport) {sourceSets sourceSets.mainexecutionData files(["$buildDir/jacoco/test.exec","$buildDir/jacoco/integrationTests.exec"])reports {xml.enabled falsecsv.enabled false} }

在這種情況下,您將創(chuàng)建一個(gè)任務(wù),該任務(wù)匯總test.exec文件(來自單元測試)和IntegrationTests.exec的覆蓋范圍結(jié)果(來自集成測試)。

為了生成報(bào)告,您需要在運(yùn)行Gradle時(shí)顯式調(diào)用jacocoRootTestReport任務(wù)。

因此,編寫用于運(yùn)行Java EE測試的Gradle腳本非常簡單,而更重要的是,最終腳本文件看起來非常緊湊且易讀,而無需嚴(yán)格遵守任何靜態(tài)約定。

翻譯自: https://www.javacodegeeks.com/2015/11/java-ee-gradle-integration-tests.html

總結(jié)

以上是生活随笔為你收集整理的Java EE,Gradle和集成测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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