<?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>Mon, 03 May 2010 19:12:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Selenium RC und Firefox 3.6</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 3.6. 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 3.6 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 3.6.</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 3.6 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;3.6.*&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>
