# Junit 4 - TestSuite



## Guest (18. Apr 2007)

Wir müssen für eine Vorlesung nun JUnit 4 benutzen. Ich kannte Junit 3.8.1 ein wenig und von daher auch die TestSuites. Allerdings seh ich in bisherigen suite Methoden nur so was:


```
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(SimpleUnitTest.class);
}
```

Das ist doch dafür da, dass die Testfälle aus meiner Klasse SimpleUnitTest, welche mit JUnit 4 entwickelt wurden, auch in alten JUnit Runnern verwendet werden können oder?

Soweit so gut. Bisher schreib ich vor die Methoden, die ich testen möchte ja @Test.
Das klappt soweit auch gut.

Aber gibt es in JUnit 4 nicht so was wie suite? 

Das ich z.B. vor alle Methoden @Test schreib und dann aber nur gezielt 2-3 Stück ausführen möchte. Dann will ich nicht überall aus @Test ein @Ignore machen, oder es ganz auskommentieren, sondern gezielt sagen können: Ok, führe TestMethod1...TestMethod3 aus, vor denen steht jeweils auch ein @Test.
Aber TestMethod4, vor der auch @Test steht, will ich mal nicht ausführen.

Hoffe ihr versteht mein Problem.


----------



## y0dA (18. Apr 2007)

Hoffe das hilft:


```
package org.test.junit.suite;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelAusgewaehlt;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelAuswahl;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelGis;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelGrant;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelPivot;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSchritte;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeForm;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeModule;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeReport;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeValue;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeValue2;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSimpleSelection;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelZeitreihe;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelZeitspanne;

/**
 * @author MPF
 * suite for model tests
 */
@RunWith(Suite.class)
@SuiteClasses({
				TestModelAusgewaehlt.class,
				TestModelSchritte.class,
				TestModelSimpleSelection.class,
				TestModelSiSeModule.class,
				TestModelSiSeForm.class,
				TestModelGrant.class,
				TestModelSiSeValue.class,
				TestModelSiSeValue2.class,
				TestModelSiSeReport.class,
				TestModelGis.class,
				TestModelZeitspanne.class,
				TestModelZeitreihe.class,
				TestModelAuswahl.class,
				TestModelPivot.class				
				})
public class SuiteTestModelAll {

}
```


----------



## Gast (18. Apr 2007)

hm..danke für die antwort, aber wie verwende ich das bei mir? zudem ist es so, so seh ich das zumindest, das du jetzt ja nur aus verschiedenen klassen alle testmethoden holst und nicht aus einer spezifische.

trotzdem danke.


----------



## y0dA (18. Apr 2007)

Vllt wird nun verständlicher:


Also folgendes ist eine Testklasse ein welcher mehrer Tests durchgeführt werden.

```
package org.uba.gegenstandsbereich.emoris.domain.model;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.test.junit.helper.JUnitTestSelection;
import org.uba.gegenstandsbereich.emoris.domain.model.ModelGis.RowSetGeomType;
import org.uba.gegenstandsbereich.emoris.domain.model.ModelGis.RowSetPossibleType;

/**
 * @author MPF
 */
public class TestModelGis {

	/** junit test selection */
	private static JUnitTestSelection testSelection;

	//------------------------------------------------------------------------------------------------------------------
	// TEST METHODS
	//------------------------------------------------------------------------------------------------------------------

	/**
	 * beforeClass method insert a dummy report for junit tests
	 * s
	 * @throws Exception
	 *             e
	 */
	@BeforeClass
	public static void beforeAll() throws Exception {
		TestModelGis.setTestSelection(new JUnitTestSelection(false));
		TestModelGis.getTestSelection().createModelSimpleSelection();
		TestModelGis.getTestSelection().createModelGis();
	}

	/**
	 * afterClass this method delete all test-data from the database.
	 * 
	 * @throws Exception
	 *             e
	 */
	@AfterClass
	public static void afterAll() throws Exception {
		TestModelGis.getTestSelection().deleteAuswahlSSMatrix();
		TestModelGis.getTestSelection().deleteAuswahlSSTemp();
		TestModelGis.getTestSelection().deleteTestSelection();
	}

	/**
	 * test test method getRrowSetGeomTypeString
	 */
	@Test
	public void testGetRowSetGeomTypeString() {
		String result = ModelGis.getRowSetGeomTypeString(RowSetGeomType.POINT);

		assertTrue("wrong return value from method getRowSetGeomTypeString",
				result.equals("POINT"));
	}

	/**
	 * test test method getRowSetPossibleTypeInt
	 */
	@Test
	public void testGetRowSetPossibleTypeInt() {
		int result = ModelGis
				.getRowSetPossibleTypeInt(RowSetPossibleType.SELECTED);

		assertTrue("wrong return value from mehtod getRowSetPossibleTypeInt",
				result == 2);
	}

	/**
	 * test simulate refresh data
	 */
	@Test
	public void testRefreshData() {
		boolean failure = false;
		String reason = "";
		try {
			this.getModelGis().refreshData();
		} catch (Exception e) {
			failure = true;
			reason = e.toString();
		}

		assertFalse("method: testRefreshData thrown exception: " + reason,
				failure);
	}

	//------------------------------------------------------------------------------------------------------------------
	// GETTER / SETTER
	//------------------------------------------------------------------------------------------------------------------

	/**
	 * getter method
	 * 
	 * @return modelGis
	 */
	private ModelGis getModelGis() {
		return TestModelGis.getTestSelection().getModelGis();
	}

	/**
	 * getter method
	 * 
	 * @return testSelection
	 */
	private static JUnitTestSelection getTestSelection() {
		return TestModelGis.testSelection;
	}

	/**
	 * setter method
	 * 
	 * @param testSelection
	 *            junit test selection
	 */
	private static void setTestSelection(final JUnitTestSelection testSelection) {
		TestModelGis.testSelection = testSelection;
	}
}
```

Und diese gebe ich nun in der entsprechenden Suite bekannt:


```
package org.test.junit.suite;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelAusgewaehlt;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelAuswahl;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelGis;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelGrant;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelPivot;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSchritte;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeForm;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeModule;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeReport;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeValue;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSiSeValue2;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelSimpleSelection;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelZeitreihe;
import org.uba.gegenstandsbereich.emoris.domain.model.TestModelZeitspanne;

/**
 * @author MPF
 * suite for model tests
 */
@RunWith(Suite.class)
@SuiteClasses({
				TestModelAusgewaehlt.class,
				TestModelSchritte.class,
				TestModelSimpleSelection.class,
				TestModelSiSeModule.class,
				TestModelSiSeForm.class,
				TestModelGrant.class,
				TestModelSiSeValue.class,
				TestModelSiSeValue2.class,
				TestModelSiSeReport.class,
				TestModelGis.class,
				TestModelZeitspanne.class,
				TestModelZeitreihe.class,
				TestModelAuswahl.class,
				TestModelPivot.class				
				})
public class SuiteTestModelAll {

}
```

Und das ganze führe ich eben mit MAVEN aus oder in der IDE - benutzt du Eclipse? Wenn ja einfach in der Suite : Run as Junit Test

Argh ich seh grade dass du nur bestimmte TEstcases ausführen möchtest - dachte du wüsstest nicht wie man eine Suite mit JUnit 4 macht.


----------



## Gast (18. Apr 2007)

ok, das hat geholfen. ja ich benutze eclipse.

damit wäre ein teil der probleme gelöst. was ist mit dem andern was ich angesprochen habe? also das man individuell methoden auswählt, die auszuführen sind....das man nicht immer @Test wegmachen muss...

aber danke schonmal.


----------



## y0dA (18. Apr 2007)

Nun ja, wenn ich nicht alle testcases ausführen möchte dann bekommt der jeweilige testcase einfach ein *@ignore* verpasst. 

Ich verstehe den Sinn dahinter nicht so wirklich, denn man macht eben bspw für eine Klasse eine TestKlasse und in dieser Klasse testet man dann die einzelnen Methoden der Klasse. Demnach sehe ich keinen Sinn dahinter einzelne Tests einer Testklasse aufzurufen.


----------



## Gast (18. Apr 2007)

ja, ok, wollte nur wissen ob das auch geht. danke.


----------

