“Theorien” in JUnit 4.4 – Anmerkung

Man kann Theorien sehr effektiv auf alle möglichen Klassen des System ausdehnen, ohne viel Zusatzarbeit. Die im Beispiel getesteten Eigenschaften bzgl. equals und hashcode müssen auch für alle Klassen gelten. Der Schlüssel hierzu ist eine generische, abstrakte Klasse, von der abgleitet wird.

package theoryexample;
 
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
 
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
 
@RunWith(Theories.class)
public abstract class ObjectTest <ClassUnderTest> {
 
	@Theory
	public void symmetrie(ClassUnderTest a, ClassUnderTest b) {
		assumeTrue(a.equals(b));
		assertTrue(b.equals(a));
	}
 
	@Theory
	public void reflexivitaet(ClassUnderTest a) {
		// assumeTrue(true);
		assertTrue(a.equals(a));
 
	}
 
	@Theory
	public void transitivaet(ClassUnderTest a, ClassUnderTest b, ClassUnderTest c) {
		assumeTrue(a.equals(b));
		assumeTrue(b.equals(c));
		assertTrue(a.equals(c));
	}
 
	@Theory
	public void equalsHashcode(ClassUnderTest a, ClassUnderTest b) {
		assumeTrue(a.equals(b));
		assertEquals(a.hashCode(), b.hashCode());
	}
 
}
package theoryexample;
 
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
 
import org.junit.Test;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
 
public class DreieckTest extends ObjectTest  {
	@DataPoint
	public static final Dreieck d1 = new Dreieck(0.0, 0.0, 1.0, 1.0, 2.0, 2.0);
	@DataPoint
	public static final Dreieck d2 = new Dreieck(0.5, 0.5, 1.5, 1.5, 2.5, 2.5);
	@DataPoint
	public static final  Dreieck d3 = new Dreieck(0.0, 0.0, 1.0, 1.0, 3.0, 3.0);
 
	@DataPoint
	public static final  Dreieck d4 = new Dreieck(0.0, 0.0, -1.0, -2.0, -2.0, -2.0);
	@DataPoint
	public static final  Dreieck d5 = new Dreieck(0.5, 0.5, 1.5, 1.5, -2.5, -2.5);
	@DataPoint
	public static final  Dreieck d6 = new Dreieck(-1.0, 0.0, -2.0, -2.0, -3.0, -2.0);
 
	@DataPoints
	public static final Dreieck[] nochmehrDreiecke = {
		new Dreieck(-1.0, -2.0, -2.0, -2.0, -3.0, 2.0),
		new Dreieck(-1.0, -1.0, -2.0, -2.0, -4.0, 2.0),
		new Dreieck(-1.0, 0.0, -2.0, -2.0, -5.0, 2.0),
		new Dreieck(-1.0, 2.0, -2.0, -2.0, -7.0, 2.0)
	};
 
}

Alexander Draeger

Tags: , , ,

  • Share/Bookmark

Kommentare sind geschlossen.