<?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=Mockito%3A_Partielle_Mocks</id>
	<title>Mockito: Partielle Mocks - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://mletkin.net/index.php?action=history&amp;feed=atom&amp;title=Mockito%3A_Partielle_Mocks"/>
	<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;action=history"/>
	<updated>2026-05-06T13:41:41Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MimiPedia</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=118&amp;oldid=prev</id>
		<title>Ullrich: Ullrich verschob die Seite Partielle Mocks nach Mockito: Partielle Mocks</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=118&amp;oldid=prev"/>
		<updated>2023-03-09T17:40:30Z</updated>

		<summary type="html">&lt;p&gt;Ullrich verschob die Seite &lt;a href=&quot;/index.php?title=Partielle_Mocks&quot; class=&quot;mw-redirect&quot; title=&quot;Partielle Mocks&quot;&gt;Partielle Mocks&lt;/a&gt; nach &lt;a href=&quot;/index.php?title=Mockito:_Partielle_Mocks&quot; title=&quot;Mockito: Partielle Mocks&quot;&gt;Mockito: Partielle Mocks&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 9. März 2023, 17:40 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
	<entry>
		<id>https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=42&amp;oldid=prev</id>
		<title>Ullrich: Ullrich verschob die Seite Partieller Mock nach Partielle Mocks, ohne dabei eine Weiterleitung anzulegen</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=42&amp;oldid=prev"/>
		<updated>2021-04-21T20:41:19Z</updated>

		<summary type="html">&lt;p&gt;Ullrich verschob die Seite &lt;a href=&quot;/index.php?title=Partieller_Mock&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Partieller Mock (Seite nicht vorhanden)&quot;&gt;Partieller Mock&lt;/a&gt; nach &lt;a href=&quot;/index.php?title=Partielle_Mocks&quot; class=&quot;mw-redirect&quot; title=&quot;Partielle Mocks&quot;&gt;Partielle Mocks&lt;/a&gt;, ohne dabei eine Weiterleitung anzulegen&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 21. April 2021, 20:41 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
	<entry>
		<id>https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=33&amp;oldid=prev</id>
		<title>Ullrich: Die Seite wurde neu angelegt: „Kategorie:Java Kategorie:Mockito = Mock vs. Spy = Neben dem hier beschriebenen Mocks giebt es ein weiteres Konzept in Mockito, das dem Mocki sehr ähnl…“</title>
		<link rel="alternate" type="text/html" href="https://mletkin.net/index.php?title=Mockito:_Partielle_Mocks&amp;diff=33&amp;oldid=prev"/>
		<updated>2021-04-21T19:25:01Z</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;Kategorie:Java&lt;/a&gt; &lt;a href=&quot;/index.php?title=Kategorie:Mockito&quot; title=&quot;Kategorie:Mockito&quot;&gt;Kategorie:Mockito&lt;/a&gt; = Mock vs. Spy = Neben dem hier beschriebenen Mocks giebt es ein weiteres Konzept in Mockito, das dem Mocki sehr ähnl…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:Java]]&lt;br /&gt;
[[Kategorie:Mockito]]&lt;br /&gt;
= Mock vs. Spy =&lt;br /&gt;
Neben dem hier beschriebenen Mocks giebt es ein weiteres Konzept in Mockito, das dem Mocki sehr ähnlich ist: der Spy.&lt;br /&gt;
Bei einem Spy handelt es sich um ein Objekt, das um ein anderes Objekt herumgewickelt wird. Gewöhnlich wird es verwendet&lt;br /&gt;
um Laufzeit-Informationen über das Objekt zu sammeln. Man kann damit etwa überprüfen, ob eine Methode des Objekts aufgerufen&lt;br /&gt;
wurde oder nicht -- sehr praktisch in Unit-Tests. Ein Spy wird so erzeugt:&lt;br /&gt;
{{java|code=&lt;br /&gt;
Foo foo = new Foo();&lt;br /&gt;
Foo spiedFoo = Mockito.spy(foo);&lt;br /&gt;
}}&lt;br /&gt;
Im Gegensatz zum Mock benötigt der Spy für die Erzeugung ein Objekt. Das entstehende Spy-Objekt hat den gleichen Typ&lt;br /&gt;
wie das umwickelte Objekt. Wie der Mock entsteht dabei eine Unterklasse. Einen Mock braucht man nicht mit einem Spy zu&lt;br /&gt;
umwickeln, er hat bereits die gleiche Funktionalität die der Spy erzeugt. Im Folgenden geht es um die unterschiedliche&lt;br /&gt;
Verwendung von Mock und Spy, Für die Untersuchung des Aufrufverhaltens giebt es eine eigene Seite.&lt;br /&gt;
&lt;br /&gt;
= Zwei extreme Mocks =&lt;br /&gt;
Die Klasse, die hier mit der mock-Methode erzeugt wird&lt;br /&gt;
{{java|code=Echt mock = Mockito.mock(Echt.class);}}&lt;br /&gt;
ersetzt alle Methoden der Klasse {{java|Echt}} durch gemockte Methoden. Man kann also getrost von einem &amp;#039;&amp;#039;totalen Mock&amp;#039;&amp;#039;&lt;br /&gt;
sprechen. Ein Objekt der Klasse {{java|Echt}} ist ein gewissermaßen ein &amp;#039;&amp;#039;echtes&amp;#039;&amp;#039; Objekt und hingegen erwartungsgemäß keine&lt;br /&gt;
einzige Methode der Klasse. Man könnte in ihr einen entartetetn Mock sehen und als &amp;#039;&amp;#039;Null-Mock&amp;#039;&amp;#039; bezeichnen.&lt;br /&gt;
&lt;br /&gt;
Objekte der originalen Klasse können nicht unmittelbar mit Mockito manipuliert werden, man umwickelt sie daher mit&lt;br /&gt;
einem Mockito-Proxy-Objekt, einem Spy:&lt;br /&gt;
{{java|code=Echt spy = Mockito.spy(new Echt());}}&lt;br /&gt;
Zwischen diesen beiden Extremen, dem &amp;quot;Alles&amp;quot; des totalen Mock und dem &amp;quot;Nichts&amp;quot; des Null-Mock liegt ein weites&lt;br /&gt;
Feld von Möglichkeiten um Teile der Original-Klasse durch mock-Methoden zu ersetzt und Teile davon unberührt&lt;br /&gt;
zu lassen: das sind die partiellen Mocks.&lt;br /&gt;
&lt;br /&gt;
Um einen partiellen Mock zu bauen gibt es zwei diametrale Vorgehensweisen: Entweder man beginnt beim totalen&lt;br /&gt;
Mock und läßt einzelne Methoden die Funktionalität der Original-Klasse ausführen; oder man beginnt beim Null-Mock&lt;br /&gt;
und mockt einzelne Methoden, deren originale Funktionalität nicht ausgeführt werden soll. Für welches Vorgehen&lt;br /&gt;
man sich entscheidet hängt vom Anwendungsfall ab.&lt;br /&gt;
&lt;br /&gt;
== Den totalen Mock aufweichen ==&lt;br /&gt;
die Klasse {{java|Echt}} sei so definiert:&lt;br /&gt;
{{java|code=&lt;br /&gt;
class Echt {&lt;br /&gt;
    int eins() {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    int zwei(int x) {&lt;br /&gt;
        return x + 3;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
Der eingangs erzeugte Mock mockt beide Methoden. Die Methode {{java|eins}} soll nun &amp;#039;&amp;#039;nicht mehr&amp;#039;&amp;#039; gemockt werden,&lt;br /&gt;
das geht so:&lt;br /&gt;
{{java|code=&lt;br /&gt;
Echt mock = Mockito.mock(Echt.class);&lt;br /&gt;
Mockito.when(mock.eins()).thenCallRealMethod();&lt;br /&gt;
}}&lt;br /&gt;
Mehr ist dazu eigentlich nicht zu sagen. Der Aufruf von {{java|eins()}} liefert nun wie erwartet den Wert &amp;#039;&amp;#039;1&amp;#039;&amp;#039;, während der&lt;br /&gt;
Aufruf von {{java|zwei()}} für jedes Argument den Wert &amp;#039;&amp;#039;0&amp;#039;&amp;#039; liefert.&lt;br /&gt;
Man hat nun für jede Methode drei Möglichkeiten die man nach belieben anwenden kann:&lt;br /&gt;
*Nichts tun und die gemockte Methode behalten&lt;br /&gt;
*Die echte Methode der Superklasse aufrufen&lt;br /&gt;
*Die Methode mit speziellem Mock-Verhalten ausstatten&lt;br /&gt;
Die Mock-Anweisungen lassen sich beliebig mischen, wie dieses Beispiel mit Methode {{java|zwei}} der Klasse {{java|Echt}} zeigt:&lt;br /&gt;
{{java|code=&lt;br /&gt;
Echt mock = Mockito.mock(Echt.class);&lt;br /&gt;
Mockito.when(mock.drei(Mockito.anyInt())).thenCallRealMethod();&lt;br /&gt;
Mockito.when(mock.drei(Mockito.eq(5))).thenReturn(4711);&lt;br /&gt;
}}&lt;br /&gt;
Bei Aufruf von {{java|mock.zwei(5)}} erhalten wir den Wert &amp;#039;&amp;#039;4711&amp;#039;&amp;#039; aus dem Mock und in allen anderen Fällen das Ergebnis&lt;br /&gt;
der echten Methode. Auch hier ist zu beachten, daß allgemeinere Matcher vor spezielleren Matchern kommen.&lt;br /&gt;
In diesem Falle also {{java|.anyInt()}} vor {{java|.eq(5)}}.&lt;br /&gt;
&lt;br /&gt;
== Den Null-Mock aushöhlen ==&lt;br /&gt;
Wir beginnen nun mit dem Spy, der als Null-Mock das komplette Original-Verhalten der Klasse {{java|Echt erhält}}.&lt;br /&gt;
Diesmal möchten wir die Methode {{java|eins}} mocken, während die Methode {{java|zwe)}} weiterhin das reale Verhalten aufweist:&lt;br /&gt;
{{java|code=&lt;br /&gt;
Echt spy= Mockito.spy(new Echt());&lt;br /&gt;
Mockito.when(spy.eins()).thenReturn(3);&lt;br /&gt;
}}&lt;br /&gt;
Und fertig ist die Laube.&lt;/div&gt;</summary>
		<author><name>Ullrich</name></author>
	</entry>
</feed>