Skip to content

Latest commit

 

History

History
49 lines (38 loc) · 3.69 KB

shop.md

File metadata and controls

49 lines (38 loc) · 3.69 KB

Shop Refactoring und Unit Tests (~1h45m)

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.

PriceItem Klasse Refactoring (~15m)

Bei genauerer Betrachtung der Klasse PriceItem gibt es an zwei Stellen Potential für Verbesserungen:

Nimm die deiner Meinung nach notwendigen Anpassungen vor und erweitere den Testfall PriceItemTest entsprechend.

Product Klasse Refactoring (~1h)

Die Klasse Product repräsentiert ein einzelnes Produkt im Shop und besteht aus einer Produktnummer, einem Titel und dem Preis.

PriceItem Anwendung (~15m)

Für das Preis-Handling soll das PriceItem verwendet werden.

String-Repräsentation anpassen (~15m)

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.

Produktvergleich optimieren (~30m)

Ü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.

ProductGroup Klasse Refactoring (~30m)

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.

Produkte entfernen (~15m)

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" ].

Anzahl der Produkte (~15m)

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.