{"id":202,"date":"2021-02-01T22:35:30","date_gmt":"2021-02-01T21:35:30","guid":{"rendered":"https:\/\/www.pischka-it.de\/?p=202"},"modified":"2021-07-11T17:06:08","modified_gmt":"2021-07-11T15:06:08","slug":"arquillian-mit-junit-5-und-wildfly-server","status":"publish","type":"post","link":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/","title":{"rendered":"Arquillian mit JUnit 5 und WildFly Server"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. Einleitung<\/h2>\n\n\n\n<p>Im Java EE Kontext wird zur Ausf\u00fchrung von Integrationstests gerne das Arquillian Testframework eingesetzt. Es erm\u00f6glicht das Testen im CDI-\/EJB-Container und somit unter nahezu realen Bedingungen. <\/p>\n\n\n\n<p>Lange Zeit war die Kombination von Arquillian mit JUnit 5 jedoch nicht m\u00f6glich. Stand jetzt (Februar 2021) sind die wesentlichen H\u00fcrden aus dem Weg ger\u00e4umt worden. Die neue Version von Arquillian mit JUnit 5 Unterst\u00fctzung befindet sich zwar noch in einer fr\u00fchen Alpha-Phase, aber sie ist bereits nutzbar. Ich habe ein Beispielprojekt angelegt und bisher keine Probleme festgestellt.<\/p>\n\n\n\n<p><strong>Den vollst\u00e4ndigen Code des lauff\u00e4higen Beispielprojektes (Java EE 8) findest du auf GitHub:<\/strong> <a href=\"https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\/tree\/master\/arquillian-junit5-wildfly\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\/tree\/master\/arquillian-junit5-wildfly<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Vorbereitung<\/h2>\n\n\n\n<p>Im Fokus soll der Einsatz von Arquillian mit JUnit 5 stehen. Deshalb gehe ich nicht auf Details zu den \u00fcblichen Konfigurationsdateien einer Java EE 8 Anwendung mit CDI- und Web-Support ein (<code>beans.xml<\/code>, <code>web.xml<\/code>). Diese sind im GitHub-Repository zu finden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">pom.xml<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project ...>\n ...\n <artifactId>arquillian-junit5-wildfly<\/artifactId>\n <packaging>war<\/packaging>\n\n <properties>\n <junit.version>5.7.0<\/junit.version>\n <\/properties>\n\n <dependencyManagement>\n <dependencies>\n <dependency>\n <groupId>org.jboss.arquillian<\/groupId>\n <artifactId>arquillian-bom<\/artifactId>\n <version>1.7.0.Alpha6<\/version>\n <type>pom<\/type>\n <scope>import<\/scope>\n <\/dependency>\n <!-- wildfly-arquillian-container-remote bringt zurzeit eine Version von picketbox mit, die nicht im Maven\n Central ver\u00f6ffentlicht wurde. Deshalb wird hier eine andere Version vorgegeben. -->\n <dependency>\n <groupId>org.picketbox<\/groupId>\n <artifactId>picketbox<\/artifactId>\n <version>5.1.0.Final<\/version>\n <\/dependency>\n <\/dependencies>\n <\/dependencyManagement>\n\n <dependencies>\n <dependency>\n <groupId>javax<\/groupId>\n <artifactId>javaee-api<\/artifactId>\n <version>8.0.1<\/version>\n <scope>provided<\/scope>\n <\/dependency>\n <dependency>\n <groupId>org.junit.jupiter<\/groupId>\n <artifactId>junit-jupiter-api<\/artifactId>\n <version>${junit.version}<\/version>\n <scope>test<\/scope>\n <\/dependency>\n <dependency>\n <groupId>org.junit.jupiter<\/groupId>\n <artifactId>junit-jupiter-engine<\/artifactId>\n <version>${junit.version}<\/version>\n <scope>test<\/scope>\n <\/dependency>\n <dependency>\n <groupId>org.wildfly.arquillian<\/groupId>\n <artifactId>wildfly-arquillian-container-remote<\/artifactId>\n <version>3.0.1.Final<\/version>\n <scope>test<\/scope>\n <\/dependency>\n <dependency>\n <groupId>org.jboss.arquillian.junit5<\/groupId>\n <artifactId>arquillian-junit5-container<\/artifactId>\n <scope>test<\/scope>\n <\/dependency>\n <dependency>\n <groupId>org.jboss.shrinkwrap.resolver<\/groupId>\n <artifactId>shrinkwrap-resolver-impl-maven<\/artifactId>\n <scope>test<\/scope>\n <\/dependency>\n <\/dependencies>\n\n <build>\n <finalName>${project.artifactId}<\/finalName>\n <plugins>\n <plugin>\n <groupId>org.apache.maven.plugins<\/groupId>\n <artifactId>maven-war-plugin<\/artifactId>\n <version>3.3.0<\/version>\n <\/plugin>\n <\/plugins>\n <\/build>\n<\/project><\/pre>\n\n\n\n<p>Die pom.xml sorgt u.a. daf\u00fcr die ben\u00f6tigten Abh\u00e4ngigkeiten heranzuziehen. Die Angabe von <code>finalName<\/code> definiert den Namen der war-Datei. Das ist hier besonders wichtig, da ich diesen Namen in Arquillian weiterverwende (siehe unten).<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>junit.version:<\/strong> Hierdurch wird gesteuert, dass JUnit 5 verwendet werden soll.<\/li><li><strong>arquillian-bom:<\/strong> Ab der Version 1.7.0.Alpha5 ist die Ausf\u00fchrung von JUnit 5 Tests m\u00f6glich. Hier wird die aktuellste (Stand Februar 2021) verwendet.<\/li><li><strong>wildfly-arquillian-container-remote:<\/strong> Adapter zur Kommunikation mit dem WildFly Application Server 21.x.<\/li><li><strong>arquillian-junit5-container:<\/strong> Verbindung zwischen JUnit 5 und Arquillian.<\/li><li><strong>shrinkwrap-resolver-impl-maven:<\/strong> Zur Erzeugung eines Testarchivs.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Implementierung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendung<\/h3>\n\n\n\n<p>Zur Veranschaulichung habe ich ein REST-Endpoint geschrieben, der eine CDI-Bean zur Ausf\u00fchrung verwendet. Diese CDI-Bean wird sp\u00e4ter im JUnit-Test injiziert, um die Lauff\u00e4higkeit von Arquillian zu demonstrieren.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">REST-Konfiguration<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import javax.ws.rs.ApplicationPath;\nimport javax.ws.rs.core.Application;\n\n@ApplicationPath(\"\/\")\npublic class HalloApplication extends Application {\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">REST-Endpoint<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import javax.inject.Inject;\nimport javax.ws.rs.GET;\nimport javax.ws.rs.Path;\n\n@Path(\"\/hallo\")\npublic class HalloRessource {\n\n @Inject\n private HalloBean halloBean;\n\n @GET\n public String hallo() {\n return this.halloBean.sagHalloZu(\"Arquillian mit JUnit5\");\n }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">CDI-Bean<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import javax.enterprise.context.RequestScoped;\n\n@RequestScoped\npublic class HalloBean {\n\n public String sagHalloZu(String name) {\n return \"Hallo \" + name;\n }\n}<\/pre>\n\n\n\n<p>Das Injizieren der gezeigten CDI-Bean in den REST-Endpoint funktioniert nat\u00fcrlich nur in einem CDI-Container. Wird die Anwendung beispielsweise in einen lokalen WildFly Application Server ausgef\u00fchrt, ist der REST-Endpoint unter folgender URL zu erreichen: <a href=\"http:\/\/localhost:8080\/arquillian-junit5-wildfly\/hallo\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:8080\/arquillian-junit5-wildfly\/hallo<\/a><\/p>\n\n\n\n<p>Wie du die Beispiel-Anwendung ganz einfach ausf\u00fchren kannst, erf\u00e4hrst du weiter unten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tests<\/h3>\n\n\n\n<p>Ich habe zwei JUnit-Tests angelegt, um den Unterschied zwischen der normalen und der Ausf\u00fchrung \u00fcber Arquillian aufzuzeigen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Normale Ausf\u00fchrung<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package de.pischka.arquillian.junit5;\n\nimport org.junit.jupiter.api.Assertions;\nimport org.junit.jupiter.api.Test;\n\nimport javax.inject.Inject;\nimport java.util.logging.Logger;\n\n\/**\n * Diese Testklasse l\u00e4uft au\u00dferhalb von Arquillian. Hier wird erwartet, dass die per CDI injizierte Bean NULL ist.\n *\/\npublic class HalloTest {\n\n private static final Logger LOGGER = Logger.getLogger(HalloTest.class.getName());\n\n @Inject\n private HalloBean halloBean;\n\n @Test\n public void testeOhneCdi() {\n LOGGER.info(\"Test-Ausf\u00fchrung au\u00dferhalb des Containers\");\n Assertions.assertThrows(NullPointerException.class, () -> this.halloBean.sagHalloZu(\"JUnit ohne Arquillian\"));\n }\n}<\/pre>\n\n\n\n<p>Bei diesem Test wird versucht die CDI-Bean (<code>HalloBean<\/code>) zu injizieren. Das sollte bei einer normalen Ausf\u00fchrung des JUnit-Tests allerdings nicht funktionieren. Deshalb rechne ich hier mit einer <code>NullPointerException<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ausf\u00fchrung \u00fcber Arquillian<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">package de.pischka.arquillian.junit5.container;\n\n\nimport de.pischka.arquillian.junit5.HalloBean;\nimport org.jboss.arquillian.container.test.api.Deployment;\nimport org.jboss.arquillian.junit5.ArquillianExtension;\nimport org.jboss.shrinkwrap.api.ShrinkWrap;\nimport org.jboss.shrinkwrap.api.importer.ZipImporter;\nimport org.jboss.shrinkwrap.api.spec.WebArchive;\nimport org.jboss.shrinkwrap.resolver.api.maven.Maven;\nimport org.junit.jupiter.api.Assertions;\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\n\nimport javax.inject.Inject;\nimport java.io.File;\nimport java.util.Objects;\nimport java.util.logging.Logger;\n\n\/**\n * Diese Testklasse l\u00e4uft mit Arquillian im Container. Hier wird erwartet, dass die per CDI injizierte Bean vorhanden\n * ist.\n *\/\n@ExtendWith(ArquillianExtension.class)\npublic class HalloTestImContainer {\n\n private static final Logger LOGGER = Logger.getLogger(HalloTestImContainer.class.getName());\n\n @Inject\n private HalloBean halloBean;\n\n @Test\n public void testeMitCdi() {\n LOGGER.info(\"Test-Ausf\u00fchrung im Container\");\n System.out.println(\"##### Dieser Text erscheint im Server-Log #####\");\n Assertions.assertEquals(\"Hallo Arquillian\", this.halloBean.sagHalloZu(\"Arquillian\"));\n }\n\n \/**\n * Erzeugt das Deployment zur Ausf\u00fchrung des Tests.\n *\n * @return Deployment Archiv\n *\/\n @Deployment\n public static WebArchive createDeployment() {\n LOGGER.info(\"Erzeuge Deployment-Archiv f\u00fcr die Test-Ausf\u00fchrung\");\n\n ClassLoader classLoader = ClassLoader.getSystemClassLoader();\n File classpathRoot = new File(Objects.requireNonNull(classLoader.getResource(\"\")).getPath());\n\n \/* Verwende das Archiv des normalen Deployments als Grundlage *\/\n String pfadZurWar = classpathRoot.getParent().concat(\"\/arquillian-junit5-wildfly.war\");\n\n WebArchive archive = ShrinkWrap.create(ZipImporter.class, \"test-arquillian-junit5-wildfly.war\")\n .importFrom(new File(pfadZurWar))\n .as(WebArchive.class);\n\n \/* F\u00fcge zu testende Klassen hinzu *\/\n archive.addPackages(true, \"de.pischka.arquillian.junit5.container\");\n\n File[] libs = Maven.resolver()\n .loadPomFromFile(\"pom.xml\")\n .importTestDependencies()\n .resolve().withTransitivity().asFile();\n\n \/* F\u00fcge alle Test-Dependencies aus der pom.xml hinzu *\/\n for (File file : libs) {\n archive.addAsLibrary(file);\n }\n\n return archive;\n }\n}\n<\/pre>\n\n\n\n<p>Im Grunde genommen ist das der gleiche Test. Auch hier wird versucht die <code>HalloBean<\/code> zu injizieren. Allerdings wird die Test-Ausf\u00fchrung \u00fcber <code>@ExtendWith(ArquillianExtension.class)<\/code> an Arquillian delegiert.<\/p>\n\n\n\n<p>Arquillian ben\u00f6tigt ein Archiv, welches es im Application Server VOR Ausf\u00fchrung der Tests installiert und NACH Ausf\u00fchrung wieder entfernt. Dazu ist eine Methode zu schreiben, die mit <code>@Deployment<\/code> annotiert wird und ein derartiges Archiv zur\u00fcck liefert. Was passiert hier im Detail?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Das normale war-Archiv wird als Grundlage verwendet (<code>ShrinkWrap.create<\/code>). Das mache ich so, da dies bereits die lauff\u00e4hige Anwendung ist. Was dem Archiv noch fehlt sind die Test-Klassen, -Ressourcen und -Abh\u00e4ngigkeiten.<\/li><li>Anschlie\u00dfend werden alle zu testenden Klassen hinzugef\u00fcgt. Das kann u.a. (wie in diesem Beispiel) \u00fcber die Angabe von Packages erfolgen. Auch Wildcards wie <code>de.pischka.*<\/code> sind m\u00f6glich.<\/li><li>Als letztes werden \u00fcber die <code>pom.xml<\/code> alle Test-Abh\u00e4ngigkeiten aufgel\u00f6st und ebenfalls dem Archiv hinzugef\u00fcgt. <\/li><\/ul>\n\n\n\n<p>Die gezeigten JUnit-Tests k\u00f6nnen auf \u00fcblichem Weg ausgef\u00fchrt werden. Schaltet sich Arquillian ein, so wird per Standard der lokal installierte WildFly Application Server angesprochen. Sollte es sich um einen entfernten Server oder beispielsweise ein Server in einem Docker Container (siehe auch weiter unten) handeln, ben\u00f6tigt Arquillian weitere Angaben. Dazu ist dann eine arquillian.xml im Verzeichnis src\/test\/resources anzulegen:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<arquillian xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n xmlns=\"http:\/\/jboss.org\/schema\/arquillian\"\n xsi:schemaLocation=\"http:\/\/jboss.org\/schema\/arquillian\n http:\/\/jboss.org\/schema\/arquillian\/arquillian_1_0.xsd\">\n\n <container qualifier=\"wildfly_remote_arquillian\" default=\"true\">\n <configuration>\n <property name=\"managementAddress\">127.0.0.1<\/property>\n <property name=\"managementPort\">9990<\/property>\n <property name=\"username\">admin<\/property>\n <property name=\"password\">admin1234<\/property>\n <property name=\"connectionTimeout\">10000<\/property>\n <\/configuration>\n <\/container>\n<\/arquillian><\/pre>\n\n\n\n<p>Sie sollte die Adresse zum Management-Zugang des WildFly enthalten. In dem gezeigten Beispiel habe ich das <code>connectionTimeout<\/code> auf 10 Sekunden erh\u00f6ht (Standard: 5 Sekunden), da ein im Docker-Container laufender WildFly nicht immer auf Anhieb reagiert.<\/p>\n\n\n\n<p>Das ist alles, um Tests mit Arquillian und JUnit 5 in einem WildFly Application Server 21.x auszuf\u00fchren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Ausf\u00fchren mit Docker<\/h2>\n\n\n\n<p>Das vollst\u00e4ndige Beispiel auf GitHub enth\u00e4lt einen Ordner <a href=\"https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\/tree\/master\/arquillian-junit5-wildfly\/docker\" target=\"_blank\" rel=\"noreferrer noopener\">Docker<\/a>. Dieser enth\u00e4lt das ben\u00f6tigte Dockerfile sowie Shell-Skripte zum Bauen der Anwendung per Maven, Bauen des Images inklusive war-File per Docker und Starten des Docker-Containers. Sobald der Server im Container l\u00e4uft, k\u00f6nnen die JUnit-Tests ausgef\u00fchrt werden. Der zuletzt gezeigte Test sollte dann im Docker-Container laufen.<\/p>\n\n\n\n<p>Eine genaue Anleitung ist im Hauptverzeichnis der Java EE Beispiele zu finden: <a href=\"https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Update (11.07.2021)<\/h2>\n\n\n\n<p>Gut ein halbes Jahr nach der Ver\u00f6ffentlichung des Artikels befindest sich die Version von Arquillian, die JUnit 5 Tests erm\u00f6glicht, weiterhin im Alpha-Stadium. Das Team hinter Arquillian l\u00e4sst sich mit Version 1.7.0 viel Zeit. Allerdings wird weiter daran gearbeitet, sodass ich das Beispiel auf GitHub mit den neusten Versionen von JUnit 5 (jetzt 5.7.2) und Arquillian 1.7.0.Alpha (jetzt Alpha10) aktualisiert habe.<\/p>\n\n\n\n<p>Die Stellen, die ge\u00e4ndert wurden, sind im Commit ersichtlich: <a href=\"https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\/commit\/e530e8013006f28580f8704e00390fdf1e456305\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/MatthiasPischka\/java-ee-8-beispiele\/commit\/e530e8013006f28580f8704e00390fdf1e456305<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Einleitung Im Java EE Kontext wird zur Ausf\u00fchrung von Integrationstests gerne das Arquillian Testframework eingesetzt. Es erm\u00f6glicht das Testen im CDI-\/EJB-Container und somit unter nahezu realen Bedingungen. Lange Zeit war die Kombination von Arquillian mit JUnit 5 jedoch nicht m\u00f6glich. Stand jetzt (Februar 2021) sind die wesentlichen H\u00fcrden aus […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[20,16,15,19,14,21,17],"class_list":["post-202","post","type-post","status-publish","format-standard","hentry","category-entwicklung","tag-arquillian","tag-docker","tag-java-ee","tag-junit-5","tag-maven","tag-rest","tag-wildfly"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka\" \/>\n<meta property=\"og:description\" content=\"1. Einleitung Im Java EE Kontext wird zur Ausf\u00fchrung von Integrationstests gerne das Arquillian Testframework eingesetzt. Es erm\u00f6glicht das Testen im CDI-\/EJB-Container und somit unter nahezu realen Bedingungen. Lange Zeit war die Kombination von Arquillian mit JUnit 5 jedoch nicht m\u00f6glich. Stand jetzt (Februar 2021) sind die wesentlichen H\u00fcrden aus […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Matthias Pischka\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-01T21:35:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-11T15:06:08+00:00\" \/>\n<meta name=\"author\" content=\"Matthias Pischka\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthias Pischka\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\"},\"author\":{\"name\":\"Matthias Pischka\",\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c\"},\"headline\":\"Arquillian mit JUnit 5 und WildFly Server\",\"datePublished\":\"2021-02-01T21:35:30+00:00\",\"dateModified\":\"2021-07-11T15:06:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\"},\"wordCount\":813,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c\"},\"keywords\":[\"arquillian\",\"docker\",\"java ee\",\"junit 5\",\"maven\",\"rest\",\"wildfly\"],\"articleSection\":[\"Entwicklung\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\",\"url\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\",\"name\":\"Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka\",\"isPartOf\":{\"@id\":\"https:\/\/www.pischka-it.de\/#website\"},\"datePublished\":\"2021-02-01T21:35:30+00:00\",\"dateModified\":\"2021-07-11T15:06:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.pischka-it.de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Arquillian mit JUnit 5 und WildFly Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pischka-it.de\/#website\",\"url\":\"https:\/\/www.pischka-it.de\/\",\"name\":\"Matthias Pischka\",\"description\":\"Freiberuflicher Softwareentwickler und -Architekt\",\"publisher\":{\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pischka-it.de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c\",\"name\":\"Matthias Pischka\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6ca47e9ca17ee8b688a86319840d2ce2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6ca47e9ca17ee8b688a86319840d2ce2?s=96&d=mm&r=g\",\"caption\":\"Matthias Pischka\"},\"logo\":{\"@id\":\"https:\/\/www.pischka-it.de\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.pischka-it.de\/author\/matthiaspischka\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/","og_locale":"de_DE","og_type":"article","og_title":"Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka","og_description":"1. Einleitung Im Java EE Kontext wird zur Ausf\u00fchrung von Integrationstests gerne das Arquillian Testframework eingesetzt. Es erm\u00f6glicht das Testen im CDI-\/EJB-Container und somit unter nahezu realen Bedingungen. Lange Zeit war die Kombination von Arquillian mit JUnit 5 jedoch nicht m\u00f6glich. Stand jetzt (Februar 2021) sind die wesentlichen H\u00fcrden aus […]","og_url":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/","og_site_name":"Matthias Pischka","article_published_time":"2021-02-01T21:35:30+00:00","article_modified_time":"2021-07-11T15:06:08+00:00","author":"Matthias Pischka","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Matthias Pischka","Gesch\u00e4tzte Lesezeit":"6 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#article","isPartOf":{"@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/"},"author":{"name":"Matthias Pischka","@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c"},"headline":"Arquillian mit JUnit 5 und WildFly Server","datePublished":"2021-02-01T21:35:30+00:00","dateModified":"2021-07-11T15:06:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/"},"wordCount":813,"commentCount":0,"publisher":{"@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c"},"keywords":["arquillian","docker","java ee","junit 5","maven","rest","wildfly"],"articleSection":["Entwicklung"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/","url":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/","name":"Arquillian mit JUnit 5 und WildFly Server - Matthias Pischka","isPartOf":{"@id":"https:\/\/www.pischka-it.de\/#website"},"datePublished":"2021-02-01T21:35:30+00:00","dateModified":"2021-07-11T15:06:08+00:00","breadcrumb":{"@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.pischka-it.de\/2021\/02\/01\/arquillian-mit-junit-5-und-wildfly-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.pischka-it.de\/"},{"@type":"ListItem","position":2,"name":"Arquillian mit JUnit 5 und WildFly Server"}]},{"@type":"WebSite","@id":"https:\/\/www.pischka-it.de\/#website","url":"https:\/\/www.pischka-it.de\/","name":"Matthias Pischka","description":"Freiberuflicher Softwareentwickler und -Architekt","publisher":{"@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pischka-it.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/4b5e5b657604eadfdedac659badcdd0c","name":"Matthias Pischka","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6ca47e9ca17ee8b688a86319840d2ce2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6ca47e9ca17ee8b688a86319840d2ce2?s=96&d=mm&r=g","caption":"Matthias Pischka"},"logo":{"@id":"https:\/\/www.pischka-it.de\/#\/schema\/person\/image\/"},"url":"https:\/\/www.pischka-it.de\/author\/matthiaspischka\/"}]}},"_links":{"self":[{"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/posts\/202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/comments?post=202"}],"version-history":[{"count":14,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/posts\/202\/revisions"}],"predecessor-version":[{"id":230,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/posts\/202\/revisions\/230"}],"wp:attachment":[{"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/media?parent=202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/categories?post=202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pischka-it.de\/wp-json\/wp\/v2\/tags?post=202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}