<?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>zeroseven labs &#187; JUnit</title>
	<atom:link href="http://labs.zeroseven.de/tag/junit/feed/" rel="self" type="application/rss+xml" />
	<link>http://labs.zeroseven.de</link>
	<description></description>
	<lastBuildDate>Wed, 28 Jul 2010 07:43:22 +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>Unit Testing in Java Teil 3: JUnit&#8217;s Testmethoden</title>
		<link>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-3-junits-testmethoden/</link>
		<comments>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-3-junits-testmethoden/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 07:26:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[assertEquals]]></category>
		<category><![CDATA[assertSame]]></category>
		<category><![CDATA[assertTrue]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[Funktionen]]></category>
		<category><![CDATA[JUnit]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=511</guid>
		<description><![CDATA[Letzte Woche haben wir ein einfaches Beispiel zur Demonstration von JUnit erstellt. Heute wollen wir uns die Testmethoden anschauen, welche JUnit schon von Haus aus mitbringt. Diese Methoden werden Assertions benannt, vielleicht dem einen oder anderen ein schon bekannter Ausdruck von anderen Programmiersprachen. Im Englischen bedeutet das Wort to assert soviel wie behaupten, feststellen oder [...]]]></description>
			<content:encoded><![CDATA[<p><a title="JUnit in Java Teil 2" href="http://labs.zeroseven.de/2008/08/unit-testing-in-java-teil-2-ein-einfaches-beispiel/" target="_blank">Letzte Woche</a> haben wir ein einfaches Beispiel zur Demonstration von JUnit erstellt. Heute wollen wir uns die Testmethoden anschauen, welche JUnit schon von Haus aus mitbringt. Diese Methoden werden Assertions benannt, vielleicht dem einen oder anderen ein schon bekannter Ausdruck von anderen Programmiersprachen. Im Englischen bedeutet das Wort <em>to assert </em>soviel wie behaupten, feststellen oder versichern. Wir stellen also fest, das eine gewisse Bedingung eintrifft.</p>
<p><span id="more-511"></span></p>
<p>Alle Assertions in JUnit beginnen mit dem Schlüsselwort assert, folgende stehen uns dabei zu Verfügung:</p>
<ul>
<li>assertEquals</li>
<li>assertNull</li>
<li>assertSame</li>
<li>assertTrue</li>
<li>assertArrayEquals</li>
</ul>
<p>Analog zu diesen Funktionen gibt es auch die entsprechenden negierenden Funktionen</p>
<ul>
<li>assertNotNull</li>
<li>assertNotSame</li>
<li>assertFalse</li>
</ul>
<p>Die einzelnen Funktionen befinden sich alle in der Klasse Assert im Paket junit.framework. Neuere Funktionen befinden sich in org.junit. Die JavaDoc zu Junit kann man auf der <a title="Junit API JavaDoc" href="http://junit.org/junit/javadoc/4.5/" target="_blank">offiziellen Website von JUnit</a> finden.</p>
<p><strong>static void assertEquals([String message], expected, actual)</strong></p>
<p>assertEquals wird am Häufigsten verwendet. Die Funktion überprüft ob der Erwartungswert <em>expected</em> dem tatsächlichen Wert <em>actual</em> entspricht. Der Test schlägt fehl, wenn sich die beiden Werte gleichen. Möchte man eine eigene Nachricht definieren, welche bei Fehlschlagen des Tests angezeigt wird, so kann man das über den optionalen Parameter <em>message </em>angeben. Die Parameter <em>expected</em> und <em>actual</em> können beliebige Datentypen aufnehmen, von primitiven Datentypen wie int oder boolean bis zu allen Objekten die in Java erstellt werden. Werden Arrays miteinander verglichen wird nicht der Inhalt der Arrays, sondern lediglich die Referenz auf die Arrays zum Vergleich verwendet.</p>
<p><strong>static void assertEquals([String message], expected, actual, tolerance)</strong></p>
<p>Eine Besonderheit stellt der Vergleich von Fließkommazahlen dar, da mit ihnen nicht immer exakte Werte verglichen werden können. Das wird hauptsächlich durch die begrenzte Anzahl von Dezimalstellen nach dem Komma und den nach sich ziehenden Rundungs- und Berechnungsfehlern verursacht. Zum Ausgleich bietet asserEquals den Wert <em>tolerance</em> an, welcher die Genauigkeit nach dem Komma angibt. Gibt man für <em>tolerance</em> zum Beispiel den Wert 0.001 an, dann werden nur die letzten 3 Stellen nach dem Komma berücksichtigt. 0.01 wären 2 Stellen 0.000001 wären 6 Stellen.</p>
<p><strong>static void asserNull([String message], java.lang.Object object)</strong></p>
<p>assertNull überprüft ob ein Objekt null ist. Wie auch bei den anderen Assertions kann eine benutzerdefinierte Nachricht über den optionalen Parameter <em>message</em> angegeben werden. Analog dazu gibt es die Methode assertNotNull, welche überprüft ob das übergebene Objekt nicht null ist.</p>
<p><strong>static void assertSame([String message], expected, actual)</strong></p>
<p>Diese Methode überprüft ob zwei Objeke gleich sind. Dabei wird nicht überprüft ob die Inhalte, sondern ob die Objekttypen übereinstimmen. Wie auch bei assertNull das Gegenteil mit assertNotNull getestet werden kann, gibt es für diese Funktion den Gegenspieler asserNotSame.</p>
<p><strong>static void assertTrue([String message], boolean condition)</strong></p>
<p>Hier wird geprüft ob die Bedingung <em>condition</em> true ergibt. Das kann ein arithmetischer Ausdruck sein, aber auch ein Funktionsaufruf. Der Gegenspieler hierzu ist assertFalse, welcher (Überraschung) überprüft ob die angegebene Bedingung false ergibt. <em>message</em> ist, wie bei den vorherigen Funktionen, wieder der optionale Parameter mit welchem man eine benutzerdefinierte Nachricht angeben kann.</p>
<p><strong>static void assertArrayEquals([String message], expecteds, actuals)</strong></p>
<p>Wie schon erwähnt ist es nicht möglich die Inhalte von Arrays über die Funktion assertEquals zu vergleichen. Dafür gibt es die Funktion assertArrayEquals. Diese funktioniert genau gleich wie assertEquals, vergleicht jedoch die einzelnen Inhalte der Arrays. Diese Funktion steht erst ab Version 4.3 der JUnit API zur Verfügung.</p>
<p><strong>static void fail([String message])</strong></p>
<p>Eigentlich ist diese Funktion nicht wirklich eine Assertion, da keine Werte getestet werden. Der Test schlägt mit dieser Methode automatisch fehl und wird häufig dazu verwendet um Zweige des Programms zu testen, welche eigentlich nie erreicht werden dürften.</p>
<p>Mit diesen Funktionen als Handwerkszeug sind die meisten Testfälle abgedeckt. Im nächsten Teil der Serie werden wir Best Practices und wie getestet werden sollte besprechen.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-3-junits-testmethoden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit Testing in Java Teil 2: Ein Einfaches Beispiel</title>
		<link>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-2-ein-einfaches-beispiel/</link>
		<comments>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-2-ein-einfaches-beispiel/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 12:55:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Beispiel]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=440</guid>
		<description><![CDATA[In Teil 1 des Unit Testing Tutorials habe ich erklärt wie Unit Tests funktionieren. Um das an einem einfachen Beispiel zu vertiefen, schreiben wir unseren ersten eigenen Unit Test. JUnit ist in Eclipse schon vorhanden und muss lediglich beim Erstellen eines Projekts als Bibliothek importiert werden.

Schritt 1: Erstellen eines JUnit-Projekts in Eclipse
Erstellen Sie ein neues [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://labs.zeroseven.de/2008/08/unit-testing-in-java-teil-1-grundlagen/">Teil 1 des Unit Testing Tutorials</a> habe ich erklärt wie Unit Tests funktionieren. Um das an einem einfachen Beispiel zu vertiefen, schreiben wir unseren ersten eigenen Unit Test. JUnit ist in Eclipse schon vorhanden und muss lediglich beim Erstellen eines Projekts als Bibliothek importiert werden.</p>
<p><span id="more-440"></span></p>
<p><strong>Schritt 1: Erstellen eines JUnit-Projekts in Eclipse</strong></p>
<div id="attachment_441" class="wp-caption alignright" style="width: 94px"><a href="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-4.png" rel="lightbox[440]"><img class="size-thumbnail wp-image-441" src="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-4-150x150.png" alt="Neues Projekt erstellen" width="84" height="84" /></a><p class="wp-caption-text">Abbildung 1: Neues Projekt erstellen</p></div>
<div id="attachment_444" class="wp-caption alignright" style="width: 94px"><a href="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-5.png" rel="lightbox[440]"><img class="size-thumbnail wp-image-444" src="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-5-150x150.png" alt="Build Einstellungen" width="84" height="84" /></a><p class="wp-caption-text">Abbildung 2: Build Einstellungen</p></div>
<div id="attachment_447" class="wp-caption alignright" style="width: 94px"><a href="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-6.png" rel="lightbox[440]"><img class="size-thumbnail wp-image-447" src="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-6-150x150.png" alt="Auswahldialog für Bibliotheken" width="84" height="84" /></a><p class="wp-caption-text">Abbildung 3: Auswahl der Bibliothek</p></div>
<div id="attachment_452" class="wp-caption alignright" style="width: 94px"><a href="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-7.png" rel="lightbox[440]"><img class="size-thumbnail wp-image-452" src="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-7-150x150.png" alt="JUnit-Version" width="84" height="84" /></a><p class="wp-caption-text">Abbildung 4: JUnit-Version</p></div>
<p>Erstellen Sie ein neues Java-Projekt in Eclipse und vergeben Sie einen sinnvollen Namen <em>(Abbildung 1)</em>. Unser Beispiel wird aus simplen Rechenfunktionen bestehen. Wichtig ist, das in den Build-Einstellungen im Reiter Libraries die JUnit-Bibliothek eingebunden wird. Dazu wählt man Add Library &#8230; <em>(Abbildung 2)</em> und dann JUnit (<em>Abbildung 3)</em>. Im darauffolgenden Fenster kann die Version von JUnit ausgewählt werden. In unserem Fall nehmen wir die Version 4 <em>(siehe Abbildung 4).</em></p>
<p><strong>Schritt 2: Anlegen eines Tests</strong></p>
<div id="attachment_469" class="wp-caption alignright" style="width: 94px"><a href="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-8.png" rel="lightbox[440]"><img class="size-thumbnail wp-image-469" src="http://labs.zeroseven.de/wp-content/uploads/2008/08/bild-8-150x150.png" alt="JUnit in Eclipse" width="84" height="84" /></a><p class="wp-caption-text">Abbildung 5: JUnit in Eclipse</p></div>
<p>Wir legen uns die Klasse Rechnen.java <em>(Quellcode 1)</em> in unserem Projekt an. Das wird die Klasse sein, welche die zu testenden Funktionen enthält. Wir erstellen uns eine Methode names <code>addiere()</code>. Die Funktion empfängt zwei Zahlen addiert diese beiden und gibt diese zurück. Wir werden diese Klasse später noch um weitere Funktionen erweitern. Wie ich in Teil 1 der Artikelreihe schon erwähnt habe, werden für gewöhnlich die Tests zuerst geschrieben und dann die Funktion implementiert.</p>
<p>Als nächstes erstellen wir uns die Klasse TestRechnen.java <em>(Quellcode 2)</em>. Diese erbt von der JUnit-Klasse <code>TestCase</code>. Wir erzeugen eine neue Instanz von Rechnen, deren Funktionen wir Testen wollen. Die Methode, welche den Test ausführt nennen wir <code>testAddiere()</code>. Alle Methoden, welche einen Test ausführen, müssen auch mit test beginnen. Innerhalb der Funktion wird assertEquals aufgerufen. Diese Funktion wird von JUnit gestellt. AssertEquals überprüft ob der Wert den man erwartet der Gleiche ist, welcher von der zu testenden Funktion zurückgegeben wird. In unserem Beispiel erwarten wir das der Aufruf der Methode addiere mit den Zahlen 1 und 1, 2 ergeben.</p>
<pre>Quellcode 1: Rechnen.java
package de.zeroseven.tutorials;

public class Rechnen {

	public int addiere(int zahl1, int zahl2) {
		return zahl1 + zahl2;
	}
}</pre>
<p>Um unseren Test nun auszuführen, klicken wir mit Rechts auf TestRechnen und wählen Run As &#8230; -&gt; JUnit-Test. In dem sich darauf öffnenden <em>(Abbildung 5)</em> Fenster, werden nun alle Tests angezeigt. Die allerwichtigste Anzeige ist der große grüne Balken, welcher anzeigt das alle Tests ohne Fehler durchlaufen worden sind. 1 und 1 sollte ja auch 2 ergeben. Um zu sehen, wie es aussieht wenn ein Test schief läuft, stellen Sie den Erwartungswert auf was Anderes als 2. Dann wird der grüne Balken rot angezeigt.</p>
<pre>Quellcode 2: TestRechnen.java
package de.zeroseven.tutorials;

import junit.framework.TestCase;

public class TestRechnen extends TestCase {

	private Rechnen myRechnen = new Rechnen();

	public void testAddiere() throws Exception {
		assertEquals(2, myRechnen.addiere(1,1));
	}
}</pre>
<p>Unterhalb des Balkens werden Details zum Schieflaufen des Tests angezeigt, wie zum Beispiel wo der Fehler aufgetreten ist. Was uns durch die Veränderung des Erwartungswertes angezeigt wird ist kein Fehler sondern ein Failure. Ein Fehler wird in JUnit als Error bezeichnet. Um dies zu provozieren fügen wir eine neue Testfunktion namens testError ein <em>(Quellcode 3)</em>. Diese macht nichts anderes als eine Exception zu werfen. Ändern Sie den Erwartungswert wieder auf 2 und starten sie den Unit-Test neu. Nun wird ein Fehler und kein Failure mehr angezeigt.</p>
<pre>Quellcode 3: Funktion die einen Error erzeugt
public void testError() throws Exception {
	throw new Exception("Irgendwas lief schief");
}</pre>
<p>Das war unser erster einfacher Unit-Test. Im nächsten Teil der Reihe werde ich auf die unterschiedlichen Testmethoden wie <code>assertEquals</code>, welche JUnit schon mitbringt.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-2-ein-einfaches-beispiel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unit Testing in Java Teil 1: Grundlagen</title>
		<link>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-1-grundlagen/</link>
		<comments>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-1-grundlagen/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 12:34:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Grundlagen]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Programmierpraxis]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Softwareprojekte]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[Zweck]]></category>

		<guid isPermaLink="false">http://labs.zeroseven.de/?p=398</guid>
		<description><![CDATA[Testen ist bei einem Softwareprojekt ein wichtiger Schritt. Häufig wird dieser Schritt am Schluss und zu kurz gemacht, dabei ist Softwareentwicklung, gerade größere Projekte, immer fehleranfällig. Im Gegensatz dazu bedeutet Unit-Testing das Testen während der Implementierung. Die Tests werden sogar vor der eigentlichen Implementierung geschrieben. Das hat den Vorteil das man durch das Schreiben der [...]]]></description>
			<content:encoded><![CDATA[<p>Testen ist bei einem Softwareprojekt ein wichtiger Schritt. Häufig wird dieser Schritt am Schluss und zu kurz gemacht, dabei ist Softwareentwicklung, gerade größere Projekte, immer fehleranfällig. Im Gegensatz dazu bedeutet Unit-Testing das Testen während der Implementierung. Die Tests werden sogar vor der eigentlichen Implementierung geschrieben. Das hat den Vorteil das man durch das Schreiben der Test den größten Teil des Codes automatisch schreibt.</p>
<p><span id="more-398"></span></p>
<p>Ein Unit-Test beschreibt einen Test der den logischen Teil einer Software testet, der nicht syntaktisch oder aufgrund implementierter Fehlererkennung zu Fehlern führen kann. Ein Beispiel ist ein Algorithmus der 2 Zahlen addiert. Ein Unit-Test kann nun zum Beispiel überprüfen, ob richtig addiert wird, indem man dem Test Eingabeparameter und das zu erwartende Ergebnis mitgibt. Stimmt das errechnete Ergebnis nun mit dem zu erwartenden Ergebnis überein, so wird der Test erfolgreich durchlaufen. So können automatsich Zustände abgefangen werden, die häufige Fehlerquellen sind. Zum Beispiel die Eingabe von negativen Werten, Duplikaten oder null. Das Ergebniss kann entweder ein OK, ein Failure oder ein Error sein. Failures treten am häufigsten auf und beschreiben das &#8220;Fehlschlagen&#8221; des Tests. Dabei werden die Erwartungswerte des Tests nicht erfüllt. Ein Error tritt auf wenn ein Fehler auftritt, der ein &#8220;richtiger Softwarefehler&#8221; ist. So werden nach und nach alle Komponenten getestet. Ziel sollte es sein, das keine Funktion und Klasse als Produktionscode gesehen werden soll, bis nicht alle Tests erfolgreich durchlaufen werden.</p>
<p>Unit-Testing beeinflusst durch seine Modularität den gesamten Entwicklungsprozess. Fügt ein Entwickler weitere Änderungen zum Code hinzu, dann prüft er zuerst ob die Software alle Tests erfolgreich durchläuft und stellt somit sicher das später auftretende Fehler höchstwahrscheinlich an seiner Implementierung liegen.</p>
<p>Ich verwende in diesen Artikeln Eclipse das JUnit schon mit sich führt. Arbeitet man ohne Eclipse müssen die entsprechenden Klassenpfade und Bibliotheken angepasst werden. Auf <a title="JUnit Homepage" href="http://www.junit.org" target="_blank">www.junit.org</a> kann man sich die aktuelle Version herunterladen und weitere Informationen zu JUnit erhalten.</p>
<p>In Teil 2 dieses Artikels werden wir nächste Woche unseren ersten Unit-Test schreiben und anwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.zeroseven.de/development/java/unit-testing-in-java-teil-1-grundlagen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
