In dieser Aufgabe soll an einigen Beispielen das Konzept des Test-Driven Development (TDD) umgesetzt werden.
Der Unit-Test TimeSeriesTest
enthält eine Test-Method public void testStatistics()
.
Gehe nach dem TDD-Verfahren vor und realisiere die entsprechende Logik, die im
Test definiert ist. Es müssen die Klassen TimeSeries
und
Observation
sowie deren Logik erstellt werden.
Erweitere den Unit-Test TimeSeriesTest
so, dass die Klassen TimeSeries
und
Observation
wie folgt erweitert werden:
- für eine
Observation
soll eine Maßeinheit definiert werden können (z.B. im Constructor) - folgende Einheiten sollen unterstützt werden:
m
,dm
,cm
,mm
- die Klasse
TimeSeries
soll um die Möglichkeit erweitert werden, den Mittelwert in einer bestimmten Maßeinheit ausgeben zu können
Auch hier soll nach TDD vorgegangen werden. Schreibe eine zusätzliche Methode,
die mit @Test
annotiert ist und entsprechend als Test ausgeführt wird.
Die Klasse Station
repräsentiert eine Messstation. Diese soll um zwei
Funktionen erweitert werden:
- Berechnung der Entfernung zu einer anderen Station
- Assoziation mit mehreren Zeitreihen
Für den ersten Teil soll der Point
im Feld location
als Berechnungsgrundlage
genutzt werden.
Der zweite Teil soll eine Methode zum Hinzufügen einer Zeitreihe
(void addTimeSeries(TimeSeries ts)
) und zum Ausgeben der assozierten Zeitreihen
(List<TimeSeries> getTimeSeries()
) entwickelt werden.
Es soll nach TDD vorgegangen werden. Schreibe eine eigene Klasse (mit entsprechenden Test-Methoden) für den Test.
Die Klasse Station
nutzt die JTS-Bibliothek zur Speicherung des Point
. Ein
Point
-Objekt kann wie folgt erstellt werden:
GeometryFactory gf = new GeometryFactory();
Point point = gf.createPoint(new Coordinate(12.0, 20.0));
In diesem Teil soll die Logik der Klasse OrderManager
realisiert werden.
Es soll ein Test (--> OrderManagerTest
) entwickelt werden, der folgende
Funktionalität der Klasse sicherstellt:
- über eine Methode (z.B.
public void submitOrder(Order o)
) sollen neue Bestellungen in den Manager aufgenommen werden - eine Methode (z.B.
List<Order> getQueuedOrders()
) soll die eingestellten (und noch nicht ausgeliefert) Bestellungen zurückgeben - die Auslieferung der Bestellungen soll über eine Methode
void processOrders()
angestoßen werden und die Methodevoid deliver(Product p, Customer c)
der KlasseProductDeliveryService
anstoßen - nach Ausführung von
processOrders()
soll die Liste der noch nicht ausgelieferten Bestellungen wieder leer sein - die Auslieferung der Bestellungen soll priorisiert durchgeführt werden (siehe
Methode
Order#getPriority()
)
Anmerkung: genau genommen wird hier kein Unit-Test mehr entwickelt, sondern ein Integrations-Test, da bestimmte Abläufe über ggf. mehrere Klassen getestet werden.
Committe und Pushe Deine Ergebnisse in deinen GitHub-Fork