JUnit & Multithreading - sehr seltener Fehler

Mujahiddin

Top Contributor
Hallo allerseits,
es geht um eine sehr kuriose Aufgabenstellung!
Wir haben ein Interface gegeben mit einer Dokumentation. Nun gibt es verschiedene Implementationen dieses Interfaces mit Fehlern, die wir mithilfe von TestCases in JUnit ausfindig machen sollen.
Einer dieser "Fehler" besteht darin, dass vier Threads erzeugt werden und jeder parallel in for-Schleifen einen Zähler 100x inkrementiert. Am Ende wird das Ergebnis zurückgegeben (meistens 400).
Nun lautet die Aufgabenstellung, dass man einen TestCase schreiben soll, der diesen Fehler möglichst häufig findet. Wie soll man das denn bewerkstelligen? Mehr als diese Funktion aufrufen kann ich schließlich ja nicht!

Java:
@Test
public void problemClass4Failure() {
	try {
		int parallelCounter = implementation.parallelCounter( 4 ); // rarely fails
		assertEquals( 400, parallelCounter );
	} catch( InterruptedException e ) {
		e.printStackTrace();
	}
}

Liebe Grüße!
 
Nun lautet die Aufgabenstellung, dass man einen TestCase schreiben soll, der diesen Fehler möglichst häufig findet. Wie soll man das denn bewerkstelligen? Mehr als diese Funktion aufrufen kann ich schließlich ja nicht!
Vielleicht, in dem man die Methode mehr als 1-mal aufruft? 😉
zB. 100 mal, 1000 mal...
 
Vielleicht, in dem man die Methode mehr als 1-mal aufruft? 😉
zB. 100 mal, 1000 mal...

War auch mein erster Gedanke.
Aber diese Zählervariable ist eine Instanzvariable und bei jedem Mal wird dort angefangen, wo beim letzten Mal aufgehört wurde.
Beim ersten Mal kommt also 400, danach 800 (und hier schmeißt er einen Fehler, der aber nicht mit dem MultiThreading zusammenhängt)

Was möglich wäre:
Java:
assertEquals( 0, parallelCounter % 400 );
in eine Endlosschleife, aber ich bin mir nicht sicher, ob das gemäß der Aufgabenstellung ist...
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben