Seite 1 von 1

Tests Übung 10 Aufgabe 2

Verfasst: 21. Jan 2010 12:19
von enomis
In den gegebenen Tests ist u.a folgender zu finden:

Code: Alles auswählen

@Test(expected = IllegalArgumentException.class)
	public void testAddThrow_AfterStrike() {
		//
		// setup:
		StandardFrame sut1 = new StandardFrame();
		//
		// exercise:
		sut1.addThrowScore(10);

		sut1.addThrowScore(0);	
		// verify: see annotation expected

		// tear-down: not needed.
	}
die einzige Methode auf die zugegriffen wird ist die addThrowScore und sieht wie folgt aus:

Code: Alles auswählen

@Override
	public void addThrowScore(int score) {
		// check whether the input is invalid
		if (score < 0 || score > 10)
			throw new IllegalArgumentException("The score[" + score
					+ "] is out of bounds(0,10).");

		if (!hasFirstThrow()) {
			setFirstThrowScore(score);
			return;
		}
		if (!hasSecondThrow()) {
			// check whether the input is invalid for this second throw
			if (getFirstThrowScore() != 10 && getFirstThrowScore() + score > 10)
				throw new IllegalArgumentException("The score[" + score
						+ "] is in addition with the current score["
						+ getFirstThrowScore() + "] out of bounds(0,10).");
			setSecondThrowScore(score); 
			return;
		}
		// invalid state
		throw new IllegalStateException(
				"This frame has already been used for three throws.");
	}
die im Textfall erwartete Exception wird jedoch niemals ausgelöst, da die Werte 10 und 0 von der Methode als First und SecondThrow angenommen wird. Meines erachtens, sollten wir keine Änderungen in dieser Methode vornehmen. Somit schlägt der Testfall fehl.

Kann mir jemand sagen wo mein Denkfehler liegt?

Re: Tests Übung 10 Aufgabe 2

Verfasst: 21. Jan 2010 13:05
von Sebastian Hartte
Bei mir schlägt der Testfall auch fehl. Es fehlt wohl ein isStrike() oder isFinished() check in addThrow().

Ich habs an Ralf gemeldet.

Gruß,
Sebastian

Re: Tests Übung 10 Aufgabe 2

Verfasst: 21. Jan 2010 14:08
von ice-breaker
De Bedingung in hasSecondThrow stimmt nicht, hatte ich bei mir schon korrigiert.

so funktioniert alles (logische Checks korrigiert)

Code: Alles auswählen

if (!hasSecondThrow()) {
	// check whether the input is invalid for this second throw
	if (getFirstThrowScore() == 10 || getFirstThrowScore() + score > 10)
		throw new IllegalArgumentException("The score[" + score + "] is in addition with the current score[" + getFirstThrowScore() + "] out of bounds(0,10).");
	setSecondThrowScore(score);
	return;
}

Re: Tests Übung 10 Aufgabe 2

Verfasst: 22. Jan 2010 17:14
von Manolis
Gibt es jetzt ne offizielle Version wie die Methode richtig aussehen muss?

Re: Tests Übung 10 Aufgabe 2

Verfasst: 22. Jan 2010 18:11
von mitschke
Hallo,

die Vorgabe im SVN ist jetzt geupdated.
Der letzte merge mit der Musterlösung war leider nicht korrekt, daher hatte dieser Methode nicht das letzte update.

Die Vorgabe sieht so aus:

Code: Alles auswählen

if (!hasSecondThrow()) {
	if (isStrike())
		throw new IllegalArgumentException(
				"This frame is already a strike and does not take anymore scores.");

	// check whether the input is invalid for this second throw
	if (getFirstThrowScore() + score > 10)
		throw new IllegalArgumentException("The score[" + score
				+ "] is in addition with the current score["
				+ getFirstThrowScore() + "] out of bounds(0,10).");
	setSecondThrowScore(score);
	return;
}

Re: Tests Übung 10 Aufgabe 2

Verfasst: 23. Jan 2010 11:49
von Manolis
Reicht es, wenn wir diesen abschnitt des Codes ersetzen? Oder wurde noch mehr aktualisier?

Re: Tests Übung 10 Aufgabe 2

Verfasst: 24. Jan 2010 21:39
von zeri
Der testcase testcalcAccumulatedScore_Strike_NoBonusScore failed bei mir.
imho sieht dieser test wie folgt aus:
2 Frames das 1. ein Strike (10 punkte im ersten Wurf) und das 2. 0 punkte

die Gesamtpunktezahl dieser beiden Frames wäre 20 (10 punkte + 0 + 0 + 10 bonus) der test erwartet aber 10 punkte. Was habe ich falsch verstanden?

Re: Tests Übung 10 Aufgabe 2

Verfasst: 25. Jan 2010 16:04
von Sebastian Hartte
zeri hat geschrieben:Der testcase testcalcAccumulatedScore_Strike_NoBonusScore failed bei mir.
imho sieht dieser test wie folgt aus:
2 Frames das 1. ein Strike (10 punkte im ersten Wurf) und das 2. 0 punkte

die Gesamtpunktezahl dieser beiden Frames wäre 20 (10 punkte + 0 + 0 + 10 bonus) der test erwartet aber 10 punkte. Was habe ich falsch verstanden?
Wo kommt Dein 10er Bonus her? Bei einem Strike werden die nächsten beiden Würfe dazuaddiert. Der Testfall ist also korrekt.

Gruß,
Sebastian

Re: Tests Übung 10 Aufgabe 2

Verfasst: 25. Jan 2010 17:40
von zeri
Sebastian Hartte hat geschrieben: Wo kommt Dein 10er Bonus her? Bei einem Strike werden die nächsten beiden Würfe dazuaddiert. Der Testfall ist also korrekt.
Ok dann beziehen sich diese 10 punkte also auf den ersten Wurf ... ist dieser Test dann nicht irgendwie nunja schlecht? Ich mein er findet einen der wahrscheinlichsten fehler nicht ... nämlich den, dass man einfach immer nur die punkte des frames aufaddiert.

-Julian