<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Testdaten-Provider</id>
	<title>Testdaten-Provider - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Testdaten-Provider"/>
	<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Testdaten-Provider&amp;action=history"/>
	<updated>2026-05-06T12:41:40Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MimiPedia</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mletkin.net/index.php?title=Testdaten-Provider&amp;diff=181&amp;oldid=prev</id>
		<title>Ullrich: Die Seite wurde neu angelegt: „Category:Java Category:junit Um einen parametrisierte Test-Methode mit Daten zu versorgen bieten sich Methoden als Testdaten-Provider an. Eine solcher Provider-Methode liefert einen {{java|Stream}} von Testdaten-Sätzen. Ein Testdaten-Satz besteht in der Regel auf mehreren Einzeldaten, er kann aber natürlich auch aus einem einzelnen Datum bestehen. Jeder Satz ist in ein {{java|Arguments}}-Objekt verpackt und besteht daher immer aus Objekten; Date…“</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Testdaten-Provider&amp;diff=181&amp;oldid=prev"/>
		<updated>2024-03-19T19:15:17Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „&lt;a href=&quot;/index.php?title=Kategorie:Java&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kategorie:Java (Seite nicht vorhanden)&quot;&gt;Category:Java&lt;/a&gt; &lt;a href=&quot;/index.php?title=Kategorie:Junit&quot; title=&quot;Kategorie:Junit&quot;&gt;Category:junit&lt;/a&gt; Um einen parametrisierte Test-Methode mit Daten zu versorgen bieten sich Methoden als Testdaten-Provider an. Eine solcher Provider-Methode liefert einen {{java|Stream}} von Testdaten-Sätzen. Ein Testdaten-Satz besteht in der Regel auf mehreren Einzeldaten, er kann aber natürlich auch aus einem einzelnen Datum bestehen. Jeder Satz ist in ein {{java|Arguments}}-Objekt verpackt und besteht daher immer aus Objekten; Date…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Java]]&lt;br /&gt;
[[Category:junit]]&lt;br /&gt;
Um einen parametrisierte Test-Methode mit Daten zu versorgen bieten sich Methoden als Testdaten-Provider an.&lt;br /&gt;
Eine solcher Provider-Methode liefert einen {{java|Stream}} von Testdaten-Sätzen. Ein Testdaten-Satz besteht in der Regel&lt;br /&gt;
auf mehreren Einzeldaten, er kann aber natürlich auch aus einem einzelnen Datum bestehen. Jeder Satz ist in&lt;br /&gt;
ein {{java|Arguments}}-Objekt verpackt und besteht daher immer aus Objekten; Daten atomarer Typen werden dabei in &lt;br /&gt;
Objekte der korrespondierenden Klassen verpackt.&lt;br /&gt;
&lt;br /&gt;
Betrachten wir eine einfache Test-Methode die für die Ausführung zwei Strings benötigt.&lt;br /&gt;
Wie jede Test-Methode die eine nichtleere Parameterliste hat, muß sie mit der Annotation {{java|@ParameterizedTest}}&lt;br /&gt;
versehen sein:&lt;br /&gt;
{{java|code=&lt;br /&gt;
@ParameterizedTest&lt;br /&gt;
void passwortWirdNichtAkzeptiert(String passwort, String grund) {&lt;br /&gt;
    assertThat(policy.validate(passwort)).as(grund).isFalse();&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
== Variante 1: die statische Methode ==&lt;br /&gt;
Der einfachste Weg einen Testdaten-Provider zu definieren führt über eine statische Methode&lt;br /&gt;
die sich in der selben Klasse befindet wie die Test-Methode:&lt;br /&gt;
{{java|code=&lt;br /&gt;
static Stream&amp;lt;Arguments&amp;gt; pwdWirdNichtAkzeptiert() {&lt;br /&gt;
    return Stream.of(&lt;br /&gt;
        Arguments.of(&amp;quot;Hallo&amp;quot;, &amp;quot;nur Buchstaben&amp;quot;),&lt;br /&gt;
        Arguments.of(&amp;quot;1234567&amp;quot;, &amp;quot;nur Ziffern&amp;quot;),&lt;br /&gt;
        Arguments.of(&amp;quot;!%#&amp;amp;/()&amp;quot;, &amp;quot;nur Sonderzeichen&amp;quot;)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Stimmt der Name des Testdaten-Providers mit dem Namen der Test-Methode überein, kann man den Parameter&lt;br /&gt;
in der Annotation auch weglassen. Für diese Variante gelten folgende Einschränkungen:&lt;br /&gt;
* Die Methode muß in der gleichen Klasse liegen wie die Test-Methode&lt;br /&gt;
* Die Methode muß als {{java|static}} deklariert sein&lt;br /&gt;
* Die Methode darf &amp;#039;&amp;#039;nicht&amp;#039;&amp;#039; {{java|private}} deklariert sein&lt;br /&gt;
&lt;br /&gt;
== Variante 2: die qualifizierte statische Methode ==&lt;br /&gt;
Nachteil der ersten Variante ist, daß sich der Testdaten-Provider in der gleichen Klasse befinden muß&lt;br /&gt;
wie die Test-Methode. Das gilt auch, wenn sich die Methode in einer Member Class oder einer Inner Class befindet.&lt;br /&gt;
Damit lassen sich keine Testdaten-Provider definieren, die von mehreren geschachtelte Test-Klassen &lt;br /&gt;
-- per Annotation {{java|@Nested}} -- gemeinsam genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Befindet sich der Testdaten-Provider in einer anderen Klasse als die Test-Methode, kann man zusätzlich zur Methode&lt;br /&gt;
die Klasse angeben in der sich die Methode befindet. Die Package-Angabe muß &amp;#039;&amp;#039;&amp;#039;voll qualifiziert&amp;#039;&amp;#039;&amp;#039; sein, die Methode&lt;br /&gt;
wird mit {{java|#}} getrennt angefügt:&lt;br /&gt;
{{java|code=&lt;br /&gt;
MethodSource(&amp;quot;org.mletkin.unittest.TestDaten#pwdWirdNichtAkzeptiert&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
Wie in Variante 1 erfolgt die Angabe in Form eines Strings. Das ist fehleranfällg, weil die Klasse und die Methode&lt;br /&gt;
erst zur Laufzeit -- also bei der Test-Ausführung -- auf Existenz geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Man kann das mitigieren, indem man den String in eine Konstante auslagert:&lt;br /&gt;
{{java|code=&lt;br /&gt;
private static final String TEST_DATA = &amp;quot;org.mletkin.unittest.TestDaten#pwdWirdNichtAkzeptiert&amp;quot;;&lt;br /&gt;
...&lt;br /&gt;
@MethodSource(TEST_DATA)&lt;br /&gt;
}}&lt;br /&gt;
Das eröffnet zum einen die Möglichkeit Test-Methoden zentral bereitzustellen und zum anderen die Möglichkeit&lt;br /&gt;
die Strings auf Gültigkeit zu überprüfen. Das geschieht dann zwar auch erst zur Laufzeit, der Fehler tritt &lt;br /&gt;
dann aber wenigstens da auf wo er geschehen ist.&lt;br /&gt;
&lt;br /&gt;
== Variante 3: die Testdaten-Provider-Klasse ==&lt;br /&gt;
Eine weitere Möglichkeit den Testdaten-Provider zu implementieren ist die Definition in einer eigenen Klasse.&lt;br /&gt;
Eine solche Klasse kann allerdings nur eine einzige Testdaten-Methode anbieten, da der Zugriff über ein Interface erfolgt:&lt;br /&gt;
{{java|code=&lt;br /&gt;
public class UngueltigePassworte implements ArgumentsProvider {&lt;br /&gt;
    @Override&lt;br /&gt;
    public Stream&amp;lt;Arguments&amp;gt; provideArguments(ExtensionContext context) {&lt;br /&gt;
        return Stream.of(&lt;br /&gt;
            Arguments.of(&amp;quot;Hallo&amp;quot;, &amp;quot;nur Buchstaben&amp;quot;),&lt;br /&gt;
            Arguments.of(&amp;quot;1234567&amp;quot;, &amp;quot;nur Ziffern&amp;quot;),&lt;br /&gt;
            Arguments.of(&amp;quot;!%#&amp;amp;/()&amp;quot;, &amp;quot;nur Sonderzeichen&amp;quot;)&lt;br /&gt;
        );&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Die Testdaten-Provider-Klasse muß das Interface {{java|ArgumentsProvider}} implementieren und dazu die oben gezeigte Methode&lt;br /&gt;
implementierten. Sie erhält als Argument ein Kontext-Objekt das Informationen zur Umgebung der Test-Ausführung enthält.&lt;br /&gt;
In unserem Beispiel machen wir keinen Gebrauch davon.&lt;br /&gt;
&lt;br /&gt;
Die Verwendung erfolgt über die Annotation {{java|@ArgumentsSource}}, der jetzt die Testdaten-Provider-Klasse in Form eines&lt;br /&gt;
{{java|Class}}-Objekts übergeben wird:&lt;br /&gt;
{{java|code=&lt;br /&gt;
@ArgumentSource(UngueltigePassworte .class)&lt;br /&gt;
}}&lt;br /&gt;
Im Gegensatz zur {{java|@MethodSource}}-Verwendung in den vorangegangenen Varianten wird hier schon zur Compile-Zeit sichergestellt&lt;br /&gt;
daß die Testdaten-Provider-Klasse und die -Methode existieren.&lt;/div&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
</feed>