doppelter Code: address/books/invoice/random wird in setUp initialisiert. setCustomer auch in setUp, da ueberall der gleiche Customer verwendet wird. Nutzen: Init in einer Methode und viel uebersichtlicher.
doppelter Code: finally kann weggelassen werden, da diese Funtion von der GarbageCollection uebernommen wird. Wenn es unbedingt erwuenscht ist, kann es in einer einheitlichen _after_ Methode geschehen.
doppelter Code: DELIVERY_COSTS wir in nur einem Test gebraucht, darum auch nur in einem die Werte setzen. Nutzen: Code wird uebersichtlicher, da unnoetiger Code weggelassen werden kann.
random-Logic: random Zahl wurde entfernt, da somit die einzelnen Testfaelle vom Zufall abhaengig waren. Nutzen: Tests besser steuerbar und einige if-Anweisungen fallen weg.
doppelter Code: Invoice wurde im letzte Test null referenziert und darum jetzt entfernt. Nutzen: Uebersichtlichkeit.
Rundugsfehler: totalPrice ist nun ein int, da bei dem double rundungsfehler auftreten koennen. Nutzen: keine unerwarteten Fehler koennen so auftreten.
doppelter Code: init der bookList kann auch im SetUp passieren, da die Liste oefters verwendet wird. Nutzen: einheitlich an einem Ort und somit uebersichtlicher.
Entfernung von null Referenzen.
doppelter Code: amount nicht pro Test zuerst auf 0 und dann auf den Wert setzen. Nutzen: Weniger Code -> uebersichtlicher.
Naming of Tests: alle Tests wurden umbenannt, dass der Name dazu passt was getestet wird. Ein Testfall habe ich hinzugefuegt, da vorher mit der RandomZahl zwei Faelle moeglich waren. Einmal mit Delivery costs um 5 und einmal um 7. Weiters die zwei Konstanten Delivery_Costs nicht als Instanzvariable und Werte/Namen von beiden richtig gesetzt. Nutzen: Bei den Tests ist somit leichter zu sehen, was getestet wird.
Excptions: alle try/catch Bloecke entfernt. Vorheriges ausbessern des totalPrice auf einen int wieder rueckgaengig und DELTA hinzugefuegt. Somit keine Rundungsfehler. Alle Exceptions nun richtig deklariert. Nutzen: das Fangen der Exceptions uebernehmen nun die Tests selber.
Abgrenzung der Tests: erster Testfall wurde von mir in zwei aufgeteilt, da das Testen des Customers mit dem adden der Buecher nicht viel zu tun hat. Darum neuer Test: test_setCustomer_withSuccess() Nutzen: Testfall wird besser verstaendlich und immer nur eine Funtionalitaet testen.