Der Basis Namespace für alle folgenden Beispiele ist \NiceshopsDev\NiceAcademy\Tests\Advanced\Shop
.
Alle Klassen zu den Testaufgaben befinden sich im Ordner src/Shop bzw. test/Shop für die Unit Tests.
Bei genauerer Betrachtung der Klasse PriceItem
gibt es an zwei Stellen Potential für Verbesserungen:
- Eigenschaft
price
- Methode
PriceItem::addPrice
Nimm die deiner Meinung nach notwendigen Anpassungen vor und erweitere den Testfall PriceItemTest
entsprechend.
Die Klasse Product
repräsentiert ein einzelnes Produkt im Shop und besteht aus einer Produktnummer, einem Titel und dem Preis.
Für das Preis-Handling soll das PriceItem
verwendet werden.
Weiters soll die Methode Product::__toString
einen String nach folgendem Schema zurückliefern:
#<PRODUCT_NUMBER> <PRODUCT_TITLE>, EUR <PRODUCT_PRICE #,##>
Der Preis soll dabei auf 2 Kommastellen gerundet werden.
Passe die Methode Product::__toString
entsprechend an und erweitere den Testfall ProductTest
um einen Test für die Methode Product::__toString
.
Über die Methode Product::hasSameNumber
kann überprüft werden ob zwei Produkte dieselbe Produktnummer aufweisen.
Die Vergleichslogik dazu ist aktuell direkt in der Methode implementiert, obwohl es dafür eine eigene Klasse ProductComparator
gibt.
Wende für den Vergleich in der Methode Product::hasSameNumber
die Klasse ProductComparator
entsprechend an.
Achte dabei darauf das die Funktionalität der Methode Product::hasSameNumber
erhalten bleibt.
Überprüfe deine Implementierung anhand entsprechender Unit Tests.
Die Klasse ProductGroup
repräsentiert eine Gruppe von Produkten.
Es können beliebige Produkte hinzugefügt und wieder entfernt werden sowie diverse aggregierte Informationen (Anzahl) abgefragt werden.
Bei genauerer Betrachtung der Methode ProductGroup::removeProduct
besteht die Möglichkeit für eine Performance-Optimierung.
Nimm die deiner Meinung nach notwendigen Anpassungen an der Methode vor und implementiere im Testfall ProductGroupTest
für die Methode folgende Unit Tests:
- Produktliste ist
[]
; 1x Produkt A entfernen; Produktliste ist[]
. - Produktliste ist
[ "Produkt A", "Produkt B" ]
; Produkt A entfernen; Produktliste ist[ "Produkt B" ]
. - Produktliste ist
[ "Produkt A", "Produkt B" ]
; Produkt B entfernen; Produktliste ist[ "Produkt A" ]
. - Produktliste ist
[ "Produkt A", "Produkt B", "Produkt A" ]
; Produkt A entfernen; Produktliste ist[ "Produkt B" ]
.
Die Methode ProductGroup::getProductCount
berechnet die Anzahl für das an die Methode übergebene Produkt in der Produktgruppe.
Für den Produktvergleich soll die Klasse ProductComparator
verwendet werden.
Bau die Methode für die Anwendung der Klasse ProductComparator
entsprechend um.
Überprüfe deine Implementierung anhand entsprechender Unit Tests.