ex08 - Fehler in "CalendarUtils"

Walther_M
Erstie
Erstie
Beiträge: 16
Registriert: 11. Nov 2005 13:11
Wohnort: Seligenstadt

ex08 - Fehler in "CalendarUtils"

Beitrag von Walther_M »

Die Funktion "numberOfFridaysInPeriod" zählt die Instanz des Eingabeparameters "periodStart" hoch, bis "periodEnd" erreicht wird. Erstellt man nun ein Datum (wie in der CalendarUtilsTest Klasse "private static final Calendar DATE_2000_12_14 = createCalendar(2000, 12, 14);") und übergibt es dieser Funktion als "periodStart" Parameter wird es geändert und kann so nicht mehr in anderen Funktionen korrekt verwendet werden.

Ich weiß nicht gegen welches Designprinzip das vertößt (LSP, Design by Contract) aber so dürfte die Funktion doch nicht verwendet werden, oder?

Ausserdem wird beim erstellen eines Datums in der "CalendarUtilsTest" Klasse der Monat auf "12" gesetzt. Laut Definition werden die Monate aber auf Werte zwischen 0 und 11 gesetzt. Übergibt man einem Calendar als Monat die 12, so erhöht er das Jahr um eins und resettet den Monat wieder auf 0.

Richtig wäre:

Code: Alles auswählen

private static final Calendar DATE_2000_12_14 = createCalendar(2000, 11, 14);
Das alles nur mal so als Info für die anderen Gruppen, da uns diese Fehler doch etwas Zeit gekostet haben, da wir von einem Korrekten Rahmencode ausgegangen sind.

sge
Mausschubser
Mausschubser
Beiträge: 80
Registriert: 3. Okt 2007 10:49
Wohnort: Darmstadt

Re: ex08 - Fehler in "CalendarUtils"

Beitrag von sge »

Das mit dem Erstellen des Datums ist mir gerade auch aufgefallen.
Doof, dass der RSS-Feed nicht mehr funktioniert...
Naja, hoffen wir mal, dass es anderen Gruppen hilft!

osterhase
Erstie
Erstie
Beiträge: 20
Registriert: 26. Okt 2005 11:57

Re: ex08 - Fehler in "CalendarUtils"

Beitrag von osterhase »

Danke für den Hinweis!

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex08 - Fehler in "CalendarUtils"

Beitrag von marcel_b »

> Ich weiß nicht gegen welches Designprinzip das vertößt (LSP, Design by Contract) aber so dürfte die Funktion doch nicht verwendet werden, oder?

Vermutlich keins dieser beiden aber gegen das "principle of least surprise" :-)
Ich habe die Methode abgeändert, getestet und neu eingecheckt. Danke.

http://de.wikipedia.org/wiki/Principle_ ... t_Surprise

nlochschmidt
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 1. Okt 2007 16:38

Re: ex08 - Fehler in "CalendarUtils"

Beitrag von nlochschmidt »

Kann es sein dass die Methode

Code: Alles auswählen

numberOfFridaysInPeriod(Calendar periodStartExclusive, Calendar periodEndInclusive)
momentan das Anfangsdatum mit einbezieht?
Zumindest sagt das mein Test.

Code: Alles auswählen

public void testFridaysBetweenTwoDays() throws Exception {
		// setup
		Calendar periodStartExlusive = createCalendar(2000, 11, 1);
		Calendar periodEndInclusive = createCalendar(2000, 11, 29);
		int expectedNumberOfFridaysInPeriod = 4;
		// exercise
		int numberOfFridaysInPeriod = CalendarUtils.numberOfFridaysInPeriod(
				periodStartExlusive, periodEndInclusive);
		// verify
		assertEquals(expectedNumberOfFridaysInPeriod, numberOfFridaysInPeriod);
	}
Da schlägt der Test fehl da sowohl der 1.12.2000 als auch der 29.12.2000 ein Freitag war und er daher auf 5 Freitage kommt. Es sollte also periodStartInclusive heißen oder?

marcel_b
Nerd
Nerd
Beiträge: 600
Registriert: 31. Okt 2006 17:04
Kontaktdaten:

Re: ex08 - Fehler in "CalendarUtils"

Beitrag von marcel_b »

ja.

Antworten

Zurück zu „Archiv“