<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Axel Jung &#187; Unittests</title>
	<atom:link href="http://www.ajung.de/tag/unittests/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajung.de</link>
	<description>Privater Blog von Axel Jung aus Wiesbaden</description>
	<lastBuildDate>Tue, 22 Nov 2011 21:13:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>UnitTH  Unit Tests im zeitlichen Verlauf</title>
		<link>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/</link>
		<comments>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 21:13:42 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[Continuus Integration]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=696</guid>
		<description><![CDATA[In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://junitth.sourceforge.net/"><img class="size-full wp-image-697 alignright" title="unitth-header" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth-header.jpg" alt="" width="330" height="80" /></a>In unserem aktuellen Projekt werden ziemlich viele Selenium Tests erstellt und ausgeführt. Selenium Tests bedürfen einer besonders Intensiven Wartung und Pflege. Der Künde wünschte sich ein Monitoring über den Zustand der Tests in zeitlicher Hinsicht. Jenkins bietet einige Plugins zur Visualisierung an, aber das reichte uns nicht. Ziel war es eine Gesamtsicht  und Einzelsicht auf alle Test Module zu haben. Bei jeden Test sollte erkennbar sein bei welchen Build Lauf er erfolgreich war oder nicht.</p>
<p><a href="http://junitth.sourceforge.net/">UnitTH</a> ist ein kleines Java Tool das aus den Unit Test Ergebnis Dateien einen Report erzeugen kann.</p>
<p>Das Tool untersucht bestehende Unit Test Report XML Dateien und erzeugt daraus ein einen Report. Die zeitliche Achse wird durch Build Läufe erzeugt. UnitTH erkennt die Build Läufe anhand von Ordnern.</p>
<p>Die Reports muss in dieser Struktur vorliegen:</p>
<p>/build1/junit_log1.xml<br />
/build1/junit_log2.xml<br />
/build2/junit_log1.xml<br />
/build2/junit_log2.xml</p>
<p>In den Ordnern können beliebig viele XML Dateien liegen.</p>
<p>Testsuiten sind für das Tool sogenannte Module. Damit wird der Report gegliedert. Man muss also darauf achten das die Suiten in den Reports eindeutige Namen haben und nicht verschachtelte Suiten haben. Meine Report Dateien haben nicht ganz dem Schema entsprochen. Ich wandel die Dateien mit XSLT um.</p>
<p>Der Aufruf erfolgt so:</p>
<p><strong>java -jar -Dunitth.report.dir=/…/unitth/report unitth.jar /…/unitth/xml/*</strong></p>
<p>Man gibt also nur das Ziel Verzeichnis für die Reports und den Pfad zu den XML Dateien.</p>
<p>In den Report bekommt man eine praktische Übersicht über den aktuellen Stand der Tests und den Trend.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png"><img class="alignnone size-full wp-image-698" title="unitth_overview" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_overview.png" alt="" width="317" height="346" /></a></p>
<p>Über die Graphen kann man erkennen, wie sich die Testdauer verhält und ob sich die Anzahl der Tests verändert.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph.png"><img class="alignnone size-medium wp-image-699" title="unitth_graph" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_graph-500x235.png" alt="" width="500" height="235" /></a></p>
<p>Man bekommt eine Liste der Build Läufe und darin zusammengefasst wie deren Status war. Hier sieht man auch schön die aktuellen Trends.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs.png"><img class="alignnone size-medium wp-image-700" title="unitth_runs" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_runs-500x154.png" alt="" width="500" height="154" /></a></p>
<p>Die Module (Testsuiten) werden auch zusammengefasst dargestellt und man kann sich auf einer Unterseite den Verlauf auf Testcase Basis anschauen. Dadurch kann man besonders kritische Testfälle erkennen und dann stabilisieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests.png"><img class="alignnone size-medium wp-image-701" title="unitth_tests" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_tests-500x277.png" alt="" width="500" height="277" /></a></p>
<p>Das spannendste Feature ist die Spread Ansicht. Hier sieht man, bei welchen Build die Testfälle fehlgeschlagen sind. Damit kann man sogenannte &#8220;Blinker&#8221; Test finden. Um diese dann zu Isolieren.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung.png"><img class="alignnone size-medium wp-image-702" title="unitth_verteilung" src="http://www.ajung.de/wp-content/uploads/2011/11/unitth_verteilung-500x241.png" alt="" width="500" height="241" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2011/11/22/unitth-unit-tests-im-zeitlichen-verlauf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium Grid Server aufsetzen</title>
		<link>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/</link>
		<comments>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 19:00:47 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[Webwerkzeuge]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=629</guid>
		<description><![CDATA[In diesen Artikel geht es darum wie Selenium Grid installiert wird. Wozu Selenium Grid? Man kann Selenium Tests über einen Selenium RC Server automatisiert ausführen. Wer das schon mal gemacht hat, weiß das dieser Prozess sehr lange dauern kann. Insbesondere wenn man verschiedene Browser testen möchte und die Tests mit Dataprovidern verwendet. Das bedeutet das [...]]]></description>
			<content:encoded><![CDATA[<p>In diesen Artikel geht es darum wie Selenium Grid installiert wird.</p>
<h2>Wozu Selenium Grid?</h2>
<p>Man kann Selenium Tests über einen Selenium RC Server automatisiert ausführen. Wer das schon mal gemacht hat, weiß das dieser Prozess sehr lange dauern kann. Insbesondere wenn man verschiedene Browser testen möchte und die Tests mit Dataprovidern verwendet. Das bedeutet das die Tests nicht nur einmal, sondern mehrmals laufen und dann kommen schnell ein paar Stunden zusammen. Diese Zeit ist besonders unangenehm wenn man die Software ausliefern möchte und lange auf die Test Ergebnisse warten muss.</p>
<p>Selenium Grid behebt das Problem in dem es wie eine Art Load Balancer arbeitet. Es existiert ein Hub der genau wie der RC Server die Test Kommandos entgegen nimmt.  Der Hub verhält sich für den Test Client (z.Bsp.: PHPUnit) genauso wie der Selenium RC Server. An den Hub können sich verschieden RC Server Instanzen registrieren. Diese Server können auch auf ganz anderen Host Systemen oder Virtuellen Hosts laufen. Somit kann man auch wirklich alle Browser Varianten testen.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/07/clientdiagramjpeg.png"><img class="alignnone size-full wp-image-632" title="clientdiagramjpeg" src="http://www.ajung.de/wp-content/uploads/2010/07/clientdiagramjpeg.png" alt="" width="851" height="800" /></a></p>
<h2>Installation</h2>
<p>Man benötigt einen Host der vom Test Client erreichbar ist. Also der Rechner auf der PHPUnit oder JUnit läuft. Auf diesem Host muss <a href="http://ant.apache.org/">Ant</a> installiert sein um den Grid Hub zu starten. Selenium Grid muss man nur <a href="http://seleniumhq.org/download/">herunterladen</a> und entpacken.</p>
<h2>Hub Starten</h2>
<p>Zum Starten des Hubs wechselt man ich den Grid Verzeichniss und startet den Hub über die buid.xml</p>
<pre>ant launch-hub</pre>
<p>Damit ist der Hub auf diesen Host unter localhost:4444 erreichbar.</p>
<h2>RC Server starten</h2>
<p>Den RC Server kann man entweder auf dem dem gleichen Host starten.</p>
<pre>ant launch-remote-control -Dport=5555
</pre>
<p>oder auf einen anderen Host oder VHost</p>
<pre>ant launch-remote-control -Dport=5555 -Dhost=vhost1 -DhubURL=http://grid-hub:4444
</pre>
<p>Host: Das ist die Adresse vom Hub aus gesehen zum Host auf dem der RC Server liegt.</p>
<p>HubUrl:  Das ist die Adresse zum Hub vom Host mit dem RC Server.</p>
<p>Sinnvollerweise betreibt man die RC Server auf getrennten Hosts.</p>
<h2>RC Server Einstellungen</h2>
<p>Man kann den RC Server der unter Grid läuft genauso anpassen wie einen normalen RC Server. Um beispielsweise ein spezielles Firefox Profil zu verwenden kann man beim Starten des RC Servers noch das Selenium Argument <code>firefoxProfileTemplate mit dem Ant Property </code><code>seleniumArgs angeben.<br />
</code></p>
<pre>
<pre>ant launch-remote-control -Dport=5555<code> -DseleniumArgs=</code><code>"-firefoxProfileTemplate C:\selenium_ff"</code></pre>
</pre>
<h2>Umgebungen</h2>
<p>Der RC Server unter Grid läuft im Gegensatz zum normalen RC Server immer nur mit einer Umgebung. Standardmäßig ist das &#8220;*firefox&#8221;. Um eine andere Umgebung zu starten muss das Argument environment angeben.</p>
<pre>-Denvironment="*iexplore"
</pre>
<h2>PHPUnit und Grid</h2>
<p>Leider ist es nicht möglich den vollen Nutzen aus Grid zu ziehen wenn man mit PHPUnit arbeitet. Da PHPUnit nicht in der Lage ist die Tests parallel auszuführen.</p>
<p>Man kann aber dennoch die Tests mit dem &#8211;filter oder &#8211;group Argument aufteilen und diese dann parallel ausführen. Hierbei muss man aber dann die Ergebnisse aus den verschiedenen Ausführungen zusammenfassen.</p>
<p>Auf jeden Fall lohnt sich aber die Aufteilung für verschiedene Browser.</p>
<p>Absolut notwendig wird Grid wenn man verschiedene Build Prozesse hat die einen Selenium Server nutzen.</p>
<h2>Fazit</h2>
<p>Grid lässt sich relativ einfach aufsetzen und erhöht die Test Performance deutlich.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/08/06/selenium-grid-server-aufsetzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium RC und Firefox 4</title>
		<link>http://www.ajung.de/2010/02/22/selenium-rc-und-firefox-3-6/</link>
		<comments>http://www.ajung.de/2010/02/22/selenium-rc-und-firefox-3-6/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 19:30:22 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=602</guid>
		<description><![CDATA[Die Selenium-RC Version 1.0.1 ist leider nicht kompatibel mit dem neuen Firefox 4. Das Selenium Server Paket enthält einige Firefox Erweiterungen in denen eine maximale Kompatibilität zu Firefox 3.5 angegeben wurde. Diese Erweiterungen sind auch mit der Version 4 lauffähig, doch man muss die install.rdf Dateien anpassen. Anleitung zum modifizieren des Selenium RC Entpacke das [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ajung.de/wp-content/uploads/2010/02/big-logo.png"><img class="alignright size-full wp-image-603" title="big-logo" src="http://www.ajung.de/wp-content/uploads/2010/02/big-logo.png" alt="" width="200" height="181" /></a>Die <a href="http://seleniumhq.org/projects/remote-control/">Selenium-RC</a> Version 1.0.1 ist leider nicht kompatibel mit dem neuen Firefox 4.</p>
<p>Das Selenium Server Paket enthält einige Firefox Erweiterungen in denen eine maximale Kompatibilität zu Firefox 3.5 angegeben wurde. Diese Erweiterungen sind auch mit der Version 4 lauffähig, doch man muss die <strong>install.rdf </strong>Dateien anpassen.</p>
<h2>Anleitung zum modifizieren des Selenium RC</h2>
<ol>
<li>Entpacke das Java Archiv selenium-server.jar</li>
<li>Suche alle Dateien mit dem Namen install.rdf in dem ausgepackten Verzeichnis.</li>
<li>Ändere in den Dateien den Wert &lt;em:maxVersion&gt;3.5.*&lt;/em:maxVersion&gt; auf &lt;em:maxVersion&gt;4.*&lt;/em:maxVersion&gt;</li>
<li>Erzeuge eine neue jar Datei
<ol>
<li style="text-align: left;">Gehe in der Kommando Zeile in das ausgepackte Verzeichnis</li>
<li style="text-align: left;">Stelle sicher dass das JDK im Pfad vorhanden ist.  (PATH=C:\Programme\Java\jdk1.6.0_18\bin)</li>
<li style="text-align: left;">Erzeuge die neue Jar Datei: jar -cvfm selenium-server.jar META-INF/MANIFEST.MF *</li>
</ol>
</li>
<li style="text-align: left;">Tausche die alte selenium-server.jar mit der neuen aus.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/02/22/selenium-rc-und-firefox-3-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPunit und Eclipse PHP Tool Integration (PTI)</title>
		<link>http://www.ajung.de/2010/01/26/phpunit-und-eclipse-php-tool-integration-pti/</link>
		<comments>http://www.ajung.de/2010/01/26/phpunit-und-eclipse-php-tool-integration-pti/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 18:05:13 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=592</guid>
		<description><![CDATA[Ich nutze die Eclipse PHP Tool Integration Tools jetzt standardmäßig wegen der guten  Code Sniffer Integration wie bereits in einen älteren Blogbeitrag beschrieben. Darüber hinaus beinhaltet das Eclipse Plugin auch eine Funktion zum schnellen Ausführen von Unit Tests. Wenn man an einen Unit Test arbeitet kann man einfach einen Button im Eclipse anklicken zum Ausführen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich nutze die <a href="http://www.phpsrc.org/wiki/">Eclipse PHP Tool Integration</a> Tools jetzt standardmäßig wegen der guten  Code Sniffer Integration wie bereits in einen älteren <a href="http://www.ajung.de/2009/11/23/php_codesniffer-mit-eclipse-nutzen/">Blogbeitrag</a> beschrieben.</p>
<p>Darüber hinaus beinhaltet das Eclipse Plugin auch eine Funktion zum schnellen Ausführen von Unit Tests.</p>
<p>Wenn man an einen Unit Test arbeitet kann man einfach einen Button im Eclipse anklicken zum Ausführen des Tests.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit_button.jpg"><img class="alignnone size-full wp-image-596" title="phptools_unit_button" src="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit_button.jpg" alt="" width="129" height="65" /></a></p>
<p>Erstmal ist das relativ unspannend, da das selbe passiert wie bei einem Kommandozeilen Aufruf und die Ausgabe nur  unschön in der Eclipse Console erscheint.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit_console.jpg"><img class="alignnone size-full wp-image-593" title="phptools_unit_console" src="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit_console.jpg" alt="" width="441" height="289" /></a></p>
<p>Es spart aber immerhin einen Toolwechsel und einige Klicks.</p>
<p>Wirklich praktisch finde ich aber die Auswertung der Fehler im Editor von Eclipse. Dort wird die Stelle wo der Fehler aufgetreten ist als unterstrichener Fehler markiert.</p>
<p><a href="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit.jpg"><img class="alignnone size-full wp-image-594" title="phptools_unit" src="http://www.ajung.de/wp-content/uploads/2010/01/phptools_unit.jpg" alt="" width="317" height="30" /></a></p>
<p>Es wird nicht nur die Stelle im Test markiert sondern Fehler die in den getesteten Code Aufgetreten sind. Wenn dort ein PHP Fehler auftritt oder eine Exception geworfen wird die nicht abgefangen wird, wird diese Stelle markiert. So braucht man nicht anhand der Zeilen Nummern die Stellen suchen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/01/26/phpunit-und-eclipse-php-tool-integration-pti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpUnit Coverage Probleme mit doppelten Klassen</title>
		<link>http://www.ajung.de/2010/01/25/phpunit-coverage-probleme-mit-doppelten-klassen/</link>
		<comments>http://www.ajung.de/2010/01/25/phpunit-coverage-probleme-mit-doppelten-klassen/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 13:43:28 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=590</guid>
		<description><![CDATA[Bei der Erstellung der Codecoverage mit phpUnit bin ich schon mehrmals aus diesen PHP Fehler gestoßen: PHP Fatal error:  Cannot redeclare class Aus dem Code war kein Grund dafür ersichtlich da alle Dateien mit require_once eingebunden waren. Das Problem lag dabei in der Verwendung von Mock Klassen ohne diese vorher importiert zu haben. Ich kann [...]]]></description>
			<content:encoded><![CDATA[<p>Bei der Erstellung der Codecoverage mit phpUnit bin ich schon mehrmals aus diesen PHP Fehler gestoßen:</p>
<pre>PHP Fatal error:  Cannot redeclare class
</pre>
<p>Aus dem Code war kein Grund dafür ersichtlich da alle Dateien mit require_once eingebunden waren. Das Problem lag dabei in der Verwendung von Mock Klassen ohne diese vorher importiert zu haben.</p>
<p>Ich kann mit folgenden Code eine Object der Klasse <em>Example</em> erstellen ohne die original Klasse zu laden.</p>
<pre>$object = $this-&gt;getMock ( 'Example', array (), array (), '', false );</pre>
<p>Wenn danach die original Klasse <em>Example</em> importiert wird, ist diese schon deklariert und es kommt zu diesen Fehler. Abhilfe tut hier ein require_once im Test:</p>
<pre>require_once('path/to/Example.php');
$object = $this-&gt;getMock ( 'Example', array (), array (), '', false );
</pre>
<p>Dann klappt es auch mit der Coverage Auswertung.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2010/01/25/phpunit-coverage-probleme-mit-doppelten-klassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tricky Mock Objekte mit phpunit</title>
		<link>http://www.ajung.de/2009/02/26/tricky-mock-objekte-mit-phpunit/</link>
		<comments>http://www.ajung.de/2009/02/26/tricky-mock-objekte-mit-phpunit/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 17:36:00 +0000</pubDate>
		<dc:creator>ajung</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Unittests]]></category>

		<guid isPermaLink="false">http://www.ajung.de/?p=499</guid>
		<description><![CDATA[Mit Mock Objekten kann man in Unit Test wunderbar Verhalten von Klassen simulieren, die außerhalb des Test Kontext liegen. Man kann zwar Methoden überschreiben und deren Rückgabewert selbst definieren. $configuration = $this-&#62;getMock('Configuration',array('get')); $configuration -&#62;expects($this-&#62;any()) -&#62;method('get') -&#62;with($this-&#62;equalsTo('key1')) -&#62;will($this-&#62;returnValue('value1')); Dieses erzeugt ein Ojekt vom Typ  Configuration, welche bei der Methode get mit dem Parameter key1 den Wert [...]]]></description>
			<content:encoded><![CDATA[<p>Mit Mock Objekten kann man in Unit Test wunderbar Verhalten von Klassen simulieren, die außerhalb des Test Kontext liegen. Man kann zwar Methoden überschreiben und deren Rückgabewert selbst definieren.</p>
<pre>$configuration = $this-&gt;getMock('Configuration',array('get'));
$configuration -&gt;expects($this-&gt;any())
	-&gt;method('get')
	-&gt;with($this-&gt;equalsTo('key1'))
	-&gt;will($this-&gt;returnValue('value1'));</pre>
<p>Dieses erzeugt ein Ojekt vom Typ  Configuration, welche bei der Methode get mit dem Parameter key1 den Wert value1 zurückgibt.</p>
<p>Dieses Beispiel verdeutlicht auch gleich das Problem, wenn ein Mock-Objekt bei unterschiedlichen Parametern unterschiedliche Werte zurückgeben soll. Genau das ist mit dieser Methode nicht möglich.</p>
<p><span style="color: #ff0000;">Folgendes Beispiel geht nicht:</span></p>
<pre><span style="color: #ff0000;">$configuration = $this-&gt;getMock('Configuration',array('get'));
$configuration -&gt;expects($this-&gt;any())
</span>	<span style="color: #ff0000;">-&gt;method('get')
</span>	<span style="color: #ff0000;">-&gt;with($this-&gt;equalsTo('key1'))
</span>	<span style="color: #ff0000;">-&gt;will($this-&gt;returnValue('value1'));</span></pre>
<pre><span style="color: #ff0000;">$configuration -&gt;expects($this-&gt;any())
</span>	<span style="color: #ff0000;">-&gt;method('get')
</span>	<span style="color: #ff0000;">-&gt;with($this-&gt;equalsTo('key2'))
</span>	<span style="color: #ff0000;">&gt;will($this-&gt;returnValue('value2'));</span></pre>
<p>Callback nutzen.</p>
<p>Statt mit returnValue kann man in phpunit auch mit returnCallback arbeiten und ein wenig Logik in das Mock Objekt einbauen.</p>
<pre><span style="color: #008000;">$configuration = $this-&gt;getMock('Configuration',array('get'));
$configuration -&gt;expects($this-&gt;any())
</span>	<span style="color: #008000;">-&gt;method('get')
</span>	<span style="color: #008000;">-&gt;will($this-&gt;returnCallback(array($this,'getMockConfig')));</span></pre>
<p>In der passenden Methode kann man die Logik einbauen:</p>
<pre>public function getMockConfig($value){
	switch($value){
		case 'cache_backend':
			return 't3lib_cache_backend_File';
			break;
		case 'cache_backend_config':
			return 'defaultLifetime:3600;';
			break;
		case 'cache_frontend':
			return 't3lib_cache_VariableCache';
			break;
		default:
			return 'txefttestcache';
			break;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ajung.de/2009/02/26/tricky-mock-objekte-mit-phpunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

