JUnit Test Suite erstellen

DarthShader

Erfahrenes Mitglied
Hallo,

ich würde gerne ein paar JUnit-Tests durchführen, und diese Tests in einer JUnit-Test-Suite zusammenfassen, um alle gemeinsam auszuführen. Ich benutze Eclipse 3.3.0 Europa Release, und JUNit 4.4.3.1 (glaube ich jedenfalls, im Eclipse/Plugin Ordner gibt es das Verzeichnis "org.junit4_4.3.1" - allerdings gibt es auch das Verzeichnis "org.junit_3.8.2.v200706111738", welches jedoch leer ist).

Um einen Test zu erstellen, mache ich nen REchtsklick im Package Explorer und wähle "New" -> "JUnit Test Case". Dann kann ich verschiedene Method-Stubs auswählen, alles wird erstellt und ich kann diesen Test fahren.

Wähle ich jedoch "New" -> "JUnit Test Suite", so erscheint das Fenster für eine neue Test-Suite und im unteren bereich könnte man die Testklassen auswählen, die in die Suite eingefügt werden sollen. Dieses ist bei mir jedoch leer und ich sehe keine Möglichkeit, dort Tests hinzuzufügen (es gibt neben der Liste nur die Buttons "Select All" und "Deselect All").

Finishe ich das ganze, so wird eine Datei mit diesem Inhalt erstellt:

Java:
public class AllTests
{
	public static Test suite()
	{
		TestSuite suite = new TestSuite( "Test for de.test.lib" );
		//$JUnit-BEGIN$
		
		//$JUnit-END$
		return suite;
	}
}


Aber was soll ich damit anfangen? Wieso kann ich in dem Wizard meine Test-Klassen nicht sehen?


Über Hilfe würde ich mich sehr freuen!


Vielen Dank
 
Kann mir denn keiner helfen? Ich möchte doch nur alle meine JUnit Tests in einer Suite zusammen ausführen. Aber warum stehen meine Tests nicht in dem Neue-JUnit-Test-Suite-Wizard-Fenster? Ich weiß einfach nicht, wie ich da meine Tests hinzufügen kann :-/
 
Versuch mal so:

Java:
suite.addTestSuite(MeineKlasseTest.class);

Übrigens, es gibt viele gute Seiten, auch auf Deutsch, wo das alles erklärt ist.
Z.B.: http://www.torsten-horn.de/techdocs/java-junit.htm

Danke für Deinen Vorschlag. Wenn ich jedoch mit Eclipse einen neuen JUnit Test erstelle (mit dem Wizard, der mir schonmal alle Method Stubs erstellt), dann ist der Test eine einfache Klasse, die nicht von "TestCase" abgeleitet ist. Ich kann den Test dennoch problemlos ausführen!

Das hier funktioniert z.B.:

Java:
@Test( expected = RuntimeException.class )
public void testBaseDirCheck() {
	// Must throw a runtime exception if basedir not exist
	@SuppressWarnings( "unused" )
	ResourceManager rm = new ResourceManager( "this/should/not/exist" );
}

Das Verzeichnis existiert nicht, und die Klasse ResourceManager sollte eine RuntimeException werfen. Da dies mit der Annotaion "@Test( expected = RuntimeException.class )" angegeben wurde, ist der Test erfolgreich.

Diese vorgehensweise habe ich aus irgendeinem Beispiel... ich glaube von der JUnit Doku selbst.

Leite ich die Testklasse nun von "TestCase" ab, um Dein Vorschlag mit "suite.addTestSuite(MeineKlasseTest.class);" zu verwenden, so schlägt mein Testcode von oben fehl, obwohl er es nicht sollte.

Irgendwas stimmt doch hier nicht - wieso z.B. leitet Eclipse meine Testklasse nicht gleich von "TestCase" ab? Kann es vielleicht daran liegen, dass ich die neueste Version von JUnit verwende?

Hat sonst noch jemand eine Idee?


Vielen Dank!
 
Kann mir denn keiner helfen? Ich verstehe meine Problematik einfach nicht.Ist es immer so, dass Test-Klasse von "TestCase" abgeleitet werden? Aber warum macht Eclipse das dann nicht automatisch beim Erstellen einer solchen Testklasse? Und wieso funktioniert mein oben angegebener Unit Test nicht mehr, wenn ich von "TestCase" ableite?

Über Hilfe würde ich mich wirklich sehr freuen

Danke!
 
Nunja es handelt sich da um unterschiedliche Vorgehensweisen. Die eine ist Tests über Annotations durchzuführen und die andere manuell über Code.

Wenn du sie mit normalen Code ausführen willst dann erweiterst du TestCase, lässt jede Methode mit test beginnen und benutzt assert um den Vergleich von erhaltenem Ergebnis und gewünschten Ergebnis durchzuführen.

Dort scheint es eine nette Übersicht zu geben: http://www.frankwestphal.de/JUnit4.0.html

Das Problem ist wohl dass Eclipse nur Klassen zur Auswahl anbietet die TestCase erweitern, nur dass passt eben nicht zum neuen Prinzip der Testerstellung mit Annotations. Also musst du die Klassen selber zur Suite hinzufügen: http://radio.javaranch.com/lasse/2006/07/27/1154024535662.html
 
Danke für Deine Antwort. Der letzte Link ist genau das, was ich gesucht hatte - ich konnte es einfach nicht finden und stieß immer wieder nur auf Codebeispiele, bei denen die Testsuites auf die "alte" Weise eingebunden wurden.

Allerdings frage ich mich, warum Eclipse wunderbar damit klarkommt, einen UnitTest mit Annoatations zu erstellen, aber keine TestSuite auf die neue Art und weise generieren kann, schon merkwürdig.
 
ich mache das so...:

testklasse1:
Code:
public class TestSth extends TestCase
{

    public void setUp() throws Exception
    {
        //set up sth
    }

    public void testLoadSubordinateAssembly() throws Exception
    {
       //test sth 
    }

    public void tearDown() throws Exception
    {
     //tear down sth
    }
}

testklasse2:
Code:
public class TestSthOther extends TestCase
{

    public void setUp() throws Exception
    {
        //set up sth
    }

    public void testLoadSubordinateAssembly() throws Exception
    {
       //test sth 
    }

    public void tearDown() throws Exception
    {
     //tear down sth
    }
}

und dann:
Code:
package editorTests;

import junit.framework.Test;
import junit.framework.TestSuite;

import junit.textui.TestRunner;

public class EditorTests extends TestSuite
{

    public static void main(String[] args)
    {
        TestRunner.run(suite());
    }

    public static Test suite()
    {

        TestSuite suite = new EditorTests("editor Tests");
        suite.addTestSuite(TestSthOther .class);
        suite.addTestSuite(TestSth.class);
        return suite;
    }

    public EditorTests(String name)
    {
        super(name);
    }

}
 
Jap, aber das ist JUnit 3.8. Ich glaube DarthShader hat der Mischmasch aus dem 4er Annotationsstyle (in den Testklassen) und dem 3er Suiteaufbau irritiert.

Gruß
Ollie
 
Zurück