Java EE,Gradle和集成测试
在過去的幾年中,Apache Maven已成為Java和Java EE項目的事實上的構建工具。 但是從兩年前開始, Gradle便獲得了越來越多的用戶。 在我之前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html )之后,在這篇文章中,您將看到如何使用Gradle使用Java EE編寫集成測試Arquillian 。
Gradle是類似于Ant或Maven的構建自動化工具,但是引入了基于Groovy的DSL語言而不是XML。 因此,您可能希望生成文件是Groovy文件。 您可以閱讀我以前的文章( http://www.lordofthejars.com/2015/10/gradle-and-java-ee.html ),了解如何安裝Gradle 。
為了編寫Java EE的集成測試,事實上的工具是Arquillan。 如果您想了解Arquillian是什么,可以在( http://arquillian.org/guides/getting_started/ )或《 Arquillian In Action》一書中獲得《入門指南》 。
要開始使用Arquillian ,您需要添加Arquillian依賴項,它以BOM的形式出現。 Gradle不支持現成的BOM人工制品,但是您可以使用dependency-management-plugin Gradle插件來支持定義BOM 。
而且Gradle提供了添加除默認源之外的更多測試源集的可能性,在Maven中,默認源集是src / test / java和src / test / resources 。 這個想法是,您可以定義一個新的測試源集,以將所有集成測試放入其中。 通過這種方法,每種測試都可以清楚地分為不同的源集。 您可以在Gradle腳本中編寫Groovy代碼來實現此目的,也可以只使用gradle-testsets-plugin ,這是最簡單的方法。
因此,要注冊這兩個插件(依賴項和測試集),您需要在build.gradle腳本文件中添加下一個元素:
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'現在該添加Arquillian依賴項了。 您需要添加Arquillian BOM和兩個依賴關系,一個依賴關系設置我們將Arquillian與JUnit一起使用,另一個依賴關系將Apache TomEE應用程序服務器設置為在測試運行期間部署應用程序的目標。
用的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自動創建并配置下一個元素:
- src / integrationTests / java和src / integrationTests / resources作為有效的源集文件夾。
- 名為integrationTestsCompile依賴關系配置,其從testCompile延伸,另一種稱為integrationTestRuntime從testRuntime延伸。
- 一個名為integrationTests的Test任務,它將運行集中的測試。
- 一個名為IntegrationTestsJar的Jar任務,用于打包測試。
請注意,您可以將IntegrationTests更改為任何其他值,例如intTests,并且Gradle會將先前的元素自動配置為在testSets中設置的值(例如src / intTests / java) ,例如,測試任務將稱為intTests 。
下一步是在IntegrationTests測試集中使用Arquillian創建集成測試。 例如,用于驗證您可以在REST API中發布顏色并在調用GET方法時將其返回的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());}}您現在可以通過簡單地執行gradlew integrationTests來運行集成測試
您會注意到,如果您運行gradlew build ,那么集成測試任務將不會運行。 發生這種情況是因為未在默認的構建生命周期內注冊任務。 如果要添加IntegrationTests任務以在構建期間自動執行,則需要添加下一行:
check.dependsOn integrationTestintegrationTest.mustRunAfter test確保集成測試在檢查任務之前運行,并且如果集成測試失敗,則檢查任務會使構建失敗,并確保在集成測試之前運行單元測試。 這樣可以確保即使集成測試失敗也可以運行單元測試。
因此,現在當您運行gradlew build , gradlew build執行集成測試。
最后,如果您正在運行JaCoCo插件進行代碼覆蓋會發生什么? 您將獲得兩個JaCoCo文件,一個用于單元測試執行,另一個用于IntegrationTests執行。 但是,您可能希望看到兩者的匯總代碼覆蓋率報告都運行在一個文件中,因此您可以在執行各種測試后檢查應用程序的代碼覆蓋率。 要實現它,您只需要添加下一個任務:
task jacocoRootTestReport(type: JacocoReport) {sourceSets sourceSets.mainexecutionData files(["$buildDir/jacoco/test.exec","$buildDir/jacoco/integrationTests.exec"])reports {xml.enabled falsecsv.enabled false} }在這種情況下,您將創建一個任務,該任務匯總test.exec文件(來自單元測試)和IntegrationTests.exec的覆蓋范圍結果(來自集成測試)。
為了生成報告,您需要在運行Gradle時顯式調用jacocoRootTestReport任務。
因此,編寫用于運行Java EE測試的Gradle腳本非常簡單,而更重要的是,最終腳本文件看起來非常緊湊且易讀,而無需嚴格遵守任何靜態約定。
翻譯自: https://www.javacodegeeks.com/2015/11/java-ee-gradle-integration-tests.html
總結
以上是生活随笔為你收集整理的Java EE,Gradle和集成测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目网上备案流程(项目网上备案)
- 下一篇: Java TDD简介–第1部分