{"id":568,"date":"2025-01-08T19:18:36","date_gmt":"2025-01-08T18:18:36","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=568"},"modified":"2025-02-25T19:21:27","modified_gmt":"2025-02-25T18:21:27","slug":"cucumber-test-framework-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=568","title":{"rendered":"Cucumber-Test-Framework in Java"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Einleitung<\/h3>\n\n\n\n<p>Das Cucumber-Test-Framework ist eine weit verbreitete Open-Source-L\u00f6sung f\u00fcr die Verhaltensgetriebene Entwicklung (BDD, Behavior-Driven Development). Es erm\u00f6glicht Entwicklern und Testern, Testf\u00e4lle in einer nat\u00fcrlichen Sprache zu schreiben, die sowohl technisch versierte als auch nicht-technische Stakeholder verstehen k\u00f6nnen. In diesem Artikel wird die Verwendung von Cucumber in Java-Projekten detailliert erl\u00e4utert, einschlie\u00dflich Installation, Konfiguration, Erstellung von Tests und Best Practices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist Cucumber?<\/h3>\n\n\n\n<p>Cucumber ist ein BDD-Framework, das es erm\u00f6glicht, automatisierte Tests in einer menschenlesbaren Form zu schreiben. Es basiert auf der Gherkin-Syntax, die einfache, strukturierte Textdateien nutzt, um Testszenarien zu definieren. Diese Szenarien werden dann mit Hilfe von Java-Code implementiert.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Was ist Gherkin?<\/h3>\n\n\n\n<p>Gherkin ist eine dom\u00e4nenspezifische Sprache (DSL), die zur Beschreibung von Testszenarien in einer klaren, strukturierten Weise verwendet wird. Sie ist leicht verst\u00e4ndlich und erm\u00f6glicht es sowohl technischen als auch nicht-technischen Personen, Anforderungen in einer nachvollziehbaren Art und Weise zu formulieren. Gherkin-Dateien haben die Endung <code>.feature<\/code> und bestehen aus Schl\u00fcsselw\u00f6rtern, die die verschiedenen Bestandteile eines Testszenarios definieren:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Funktionalit\u00e4t (Feature)<\/strong>: Eine \u00fcbergeordnete Beschreibung der zu testenden Funktion.<\/li>\n\n\n\n<li><strong>Szenario (Scenario)<\/strong>: Eine spezifische Testfallbeschreibung mit vorgegebenen Bedingungen und erwarteten Ergebnissen.<\/li>\n\n\n\n<li><strong>Gegeben (Given)<\/strong>: Definiert die Ausgangssituation oder den Anfangszustand.<\/li>\n\n\n\n<li><strong>Wenn (When)<\/strong>: Beschreibt die durchzuf\u00fchrende Aktion.<\/li>\n\n\n\n<li><strong>Dann (Then)<\/strong>: Definiert die erwartete Ausgabe oder das Ergebnis.<\/li>\n\n\n\n<li><strong>Und (And) \/ Aber (But)<\/strong>: Erm\u00f6glichen zus\u00e4tzliche Bedingungen oder Aktionen innerhalb eines Szenarios.<\/li>\n\n\n\n<li><strong>Szenariovorlage (Scenario Outline)<\/strong>: Wird verwendet, um parametrisierte Tests zu erstellen, die mit verschiedenen Datens\u00e4tzen ausgef\u00fchrt werden k\u00f6nnen.<\/li>\n\n\n\n<li><strong>Beispiele (Examples)<\/strong>: Definieren verschiedene Testwerte f\u00fcr ein Szenariovorlage.<\/li>\n<\/ul>\n\n\n\n<p>Ein Beispiel f\u00fcr eine <code>feature<\/code>-Datei:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Funktionalit\u00e4t<\/span>: Login-Funktionalit\u00e4t\n\n  Szenario: Erfolgreiches Login\n    Gegeben Ein Benutzer befindet sich auf der Login-Seite\n    Wenn Der Benutzer gibt g\u00fcltige Anmeldedaten ein\n    Dann Sollte der Benutzer auf das Dashboard weitergeleitet werden\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Vorteile von Cucumber<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bessere Zusammenarbeit:<\/strong> Entwickler, Tester und Business-Analysten k\u00f6nnen gemeinsam Testf\u00e4lle schreiben.<\/li>\n\n\n\n<li><strong>Lesbarkeit:<\/strong> Die Tests sind in einer nat\u00fcrlichen Sprache formuliert.<\/li>\n\n\n\n<li><strong>Wiederverwendbarkeit:<\/strong> Schrittdefinitionen k\u00f6nnen in mehreren Tests verwendet werden.<\/li>\n\n\n\n<li><strong>Automatisierung:<\/strong> Nahtlose Integration in verschiedene Test-Frameworks wie JUnit oder TestNG.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Installation und Einrichtung von Cucumber in einem Java-Projekt<\/h3>\n\n\n\n<p>Um Cucumber in einem Java-Projekt zu nutzen, wird Maven oder Gradle als Build-Management-Tool empfohlen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">1. Maven-Abh\u00e4ngigkeiten hinzuf\u00fcgen<\/h4>\n\n\n\n<p>Falls Maven genutzt wird, m\u00fcssen folgende Abh\u00e4ngigkeiten in der <code>pom.xml<\/code>-Datei eingef\u00fcgt werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>io.cucumber<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>cucumber-java<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>7.0.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>io.cucumber<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>cucumber-junit<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">version<\/span>&gt;<\/span>7.0.0<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">version<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">scope<\/span>&gt;<\/span>test<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">scope<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependencies<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Falls Gradle verwendet wird, k\u00f6nnen folgende Zeilen in <code>build.gradle<\/code> aufgenommen werden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">dependencies {\n    testImplementation <span class=\"hljs-string\">'io.cucumber:cucumber-java:7.0.0'<\/span>\n    testImplementation <span class=\"hljs-string\">'io.cucumber:cucumber-junit:7.0.0'<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Erstellen von Cucumber-Tests<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. Gherkin-Szenarien definieren<\/h4>\n\n\n\n<p>Die Testf\u00e4lle werden in <code>.feature<\/code>-Dateien geschrieben. Eine einfache <code>login.feature<\/code>-Datei k\u00f6nnte so aussehen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Funktionalit\u00e4t<\/span>: Login-Funktionalit\u00e4t\n\n  Szenario: Erfolgreiches Login\n    Gegeben Ein Benutzer befindet sich auf der Login-Seite\n    Wenn Der Benutzer gibt g\u00fcltige Anmeldedaten ein\n    Dann Sollte der Benutzer auf das Dashboard weitergeleitet werden\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">2. Schrittdefinitionen in Java implementieren<\/h4>\n\n\n\n<p>Jeder Gherkin-Schritt muss mit einer Java-Methode verkn\u00fcpft werden. Die Implementierung erfolgt in einer <code>StepDefinitions<\/code>-Klasse:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> io.cucumber.java.de.*;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">LoginSchritte<\/span> <\/span>{\n    @Gegeben(<span class=\"hljs-string\">\"Ein Benutzer befindet sich auf der Login-Seite\"<\/span>)\n    public <span class=\"hljs-keyword\">void<\/span> benutzerAufLoginSeite() {\n        System.out.println(<span class=\"hljs-string\">\"Benutzer ist auf der Login-Seite\"<\/span>);\n    }\n\n    @Wenn(<span class=\"hljs-string\">\"Der Benutzer gibt g\u00fcltige Anmeldedaten ein\"<\/span>)\n    public <span class=\"hljs-keyword\">void<\/span> benutzerGibtAnmeldedatenEin() {\n        System.out.println(<span class=\"hljs-string\">\"Benutzer gibt g\u00fcltige Anmeldedaten ein\"<\/span>);\n    }\n\n    @Dann(<span class=\"hljs-string\">\"Sollte der Benutzer auf das Dashboard weitergeleitet werden\"<\/span>)\n    public <span class=\"hljs-keyword\">void<\/span> benutzerSiehtDashboard() {\n        System.out.println(<span class=\"hljs-string\">\"Benutzer ist auf dem Dashboard\"<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">3. TestRunner erstellen<\/h4>\n\n\n\n<p>Eine Runner-Klasse wird ben\u00f6tigt, um die Tests auszuf\u00fchren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.junit.runner.RunWith;\n<span class=\"hljs-keyword\">import<\/span> io.cucumber.junit.Cucumber;\n<span class=\"hljs-keyword\">import<\/span> io.cucumber.junit.CucumberOptions;\n\n@RunWith(Cucumber.class)\n@CucumberOptions(\n    features = <span class=\"hljs-string\">\"src\/test\/resources\/features\"<\/span>,\n    glue = <span class=\"hljs-string\">\"stepDefinitions\"<\/span>,\n    plugin = {<span class=\"hljs-string\">\"pretty\"<\/span>, <span class=\"hljs-string\">\"html:target\/cucumber-reports\"<\/span>}\n)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TestRunner<\/span> <\/span>{\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Fazit<\/h3>\n\n\n\n<p>Cucumber ist ein leistungsf\u00e4higes Framework zur Implementierung von BDD in Java-Projekten. Die Kombination aus menschenlesbaren Testszenarien und einer nahtlosen Integration in Java macht es zu einer hervorragenden Wahl f\u00fcr agile Softwareentwicklungsteams. Durch Best Practices wie Hooks, Parameterisierung und saubere Strukturierung kann das Testen effizienter und wartungsfreundlicher gestaltet werden. Gherkin als zugrunde liegende Sprache bietet eine einfache M\u00f6glichkeit, Tests verst\u00e4ndlich und \u00fcbersichtlich zu definieren, wodurch die Zusammenarbeit zwischen verschiedenen Teams verbessert wird.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Das Cucumber-Test-Framework ist eine weit verbreitete Open-Source-L\u00f6sung f\u00fcr die Verhaltensgetriebene Entwicklung (BDD, Behavior-Driven Development). Es erm\u00f6glicht Entwicklern und Testern, Testf\u00e4lle in einer nat\u00fcrlichen Sprache zu schreiben, die sowohl technisch versierte als auch nicht-technische Stakeholder verstehen k\u00f6nnen. In diesem Artikel wird die Verwendung von Cucumber in Java-Projekten detailliert erl\u00e4utert, einschlie\u00dflich Installation, Konfiguration, Erstellung von Tests [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-568","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=568"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/568\/revisions"}],"predecessor-version":[{"id":569,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/568\/revisions\/569"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}