# Hilfe zu JUnit und Exceptionbehandlung



## skleineboes (30. Jun 2006)

Hallo!
Hantiere da gerade a bissle mit JUnit herum und komme bei genau einer Sache nicht weiter.
Vieleicht habt ihr ja nen Ansatz?
Folgende Aufgabe ist zu bearbeiten:

Entwickeln Sie einen JUnit-Testfall zur Überprüfung, ob bei einem negativen aktuellen Parameter "-1" auch wirklich eine Exception vom Typ MyException geworfen wird!
Entwickeln Sie einen zweiten Testfall, der zeigt, dass bei einem aktuellen Parameter "1" die Methode problemlos ohne Exceptions durchläuft! Binden Sie beide Testfälle zu einer Test-Suite zusammen!

Das Ganze habe ich nach bestem Können und Verständnis versucht umzusetzen. Das Problem jedoch, wenn ich in meinem Code ein Sparbuch mit dem Wert -100 initialisiere, so wird die eigentlich Exception gar nicht aufgerufen. Stattdessen zeigt mir das JUnit-Framework die fail-Meldung an. Was ist zu tun damit die Exception tatsächlich aufgerufen wird?
Anbei der Code der beiden Dateien:

```
//---------------------------Das Sparbuch-----------------
package source;

public class Sparbuch
{
	private static int wert=-1;
	
	public Sparbuch(int Wert)
	{
			if (Wert>0)
				wert = Wert;
	}

	public int getWert() {
		return wert;
	}

	public void setWert(int wert) {
		Sparbuch.wert = wert;
	}
}



//---------------------------Der Testfall-----------------
package source.test;

import source.*;
import junit.framework.*;


public class SparbuchTest extends TestCase {

	
	public SparbuchTest(String name) {
		super(name);
	}
	
	
	public static Test suite()
	{
		TestSuite tSuite = new TestSuite(SparbuchTest.class.getName());
		tSuite.addTest(new SparbuchTest("testSparbuchKonstruktor1"));
		tSuite.addTest(new SparbuchTest("testSparbuchKonstruktor2"));
		
		return tSuite;
	}
	
	public void testSparbuchKonstruktor1()
	{
		try
		{
			Sparbuch sp1 = new Sparbuch(-100);   //genau ab hier sollte ja die Exception aufgerufen werden
			fail("Exception nicht ausgeführt");	
			//assert(sp1.getWert()>0);
			System.out.println(sp1.getWert());
		}
		catch(IllegalArgumentException e)
		{
			System.out.println("Das geht so nicht!");
		}
	}
	
	public void testSparbuchKonstruktor2()
	{
		Sparbuch sp2 = new Sparbuch(1);
		System.out.print(sp2.getWert());
	}
}
```

Vorab vielen Dank für eure HILFE!!!


----------



## Beni (30. Jun 2006)

Wieso sollte da eine Exception kommen, dein Code wirft ja nie eine Exception!

Wenn schon, sollte das so aussehen:

```
public Sparbuch( int wert ){
  if( wert < 0 )
    throw new IllegalArgumentException( ... );

  ... // sonstiges
}
```

P.S. und mach die Variable "wert" bitte nicht "static", ansonsten werden alle Sparbücher dieser Welt denselben Inhalt haben...


----------



## Guest (3. Jul 2006)

Hallo Sascha,

Wie klein doch das Internet ist.  :lol: 

Ich hab mir deinen Code mal angeguckt, was hälst du davon:


```
import junit.framework.TestCase;
				/*
				 *   SWT 2006 JUnit Framework - Übung
				 */


public class GirokontoTest extends TestCase {
	
	public void testKontonummer() 
	{
		Girokonto konto1 = new Girokonto(3300,4179255);
	        assertTrue(konto1.kontonummer== 4179255);
	}
	
	public void testKontostand() 
	{
		Girokonto konto1 = new Girokonto(3300,4179255);
	        assertTrue(konto1.kontostand==3300);
	}

	public void testAufGleichheit() 
	{
		Girokonto konto1 = new Girokonto(3300,4179255);
		Girokonto konto2 = new Girokonto(3300,4179255);
			assertSame(konto1,konto2);
			
	}

	public void testKontorename() 
	{
		// --Noch-keine-Gedanken-drüber-gemacht.
	}

	public void testAuszahlen() 
	{		
		Sparkonto sparkonto1 = new Sparkonto(22,22);
		sparkonto1.abheben(100);
	}

	public void testPrintSaldo() 
	{
		Girokonto girokonto = new Girokonto(24,12);
		girokonto.einzahlen(6445);
	}
}
```


Die vielen einzelnen Testfälle sind speziell für die Konto/Girokonto Klassen erzeugt, da hilft dir ja Eclipse (Rechte Maustaste -> New-> JUnit Test Case).

Die einzelnen Testfälle werden nacheinander durchlaufen, dass sollte etwa deiner Funktionalität gleichkommen?!

Gruß


----------



## Debug21 (3. Jul 2006)

Ich hab die Ausgabe noch vergessen:


Folgender Code:

```
public void testAuszahlen() 
	{		
		Sparkonto sparkonto1 = new Sparkonto(22,22);
		sparkonto1.abheben(100);
	}
```


Führt zur Ausgabe:

```
Abheben leider unmöglich! 
(Sparkonto können nur im Plus geführt werden.)
```

Beim Abheben eines zu großen Betrages greift das JUnit Framework auf die eigentlichen Methoden (sofern implementiert). Wenn du also eine Fehlerbehandlung im eigentlichen Code drin hast, durläuft der JUnit Test Case auch diesen.

Gruß


----------

