Praktische Übung 'JUnit-Test'



Ähnliche Dokumente
Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Übung: Verwendung von Java-Threads

Wollen Sie einen mühelosen Direkteinstieg zum Online Shop der ÖAG? Sie sind nur einen Klick davon entfernt!

Objektorientierte Programmierung

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Test-Driven Design: Ein einfaches Beispiel

1. Einführung. 2. Die Abschlagsdefinition

Task: Nmap Skripte ausführen

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Sicherheitseinstellungen... 2 Pop-up-Fenster erlauben... 3

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

25 Import der Beispiele

6 Das Kopieren eines bereits bestehenden Inhaltselements

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Installation und Inbetriebnahme von Microsoft Visual C Express

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Software Engineering Klassendiagramme Assoziationen

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

Urlaubsregel in David

Installation Hardlockserver-Dongle

Fortgeschrittenes Programmieren mit Java. Test Driven Development

Installation älterer Programmversionen unter Windows 7

Anleitung zur Webservice Entwicklung unter Eclipse

Java: Vererbung. Teil 3: super()

1. Einführung. 2. Weitere Konten anlegen

1. Software installieren 2. Software starten. Hilfe zum Arbeiten mit der DÖHNERT FOTOBUCH Software

So gehts Schritt-für-Schritt-Anleitung

1. Zugriff des Autostarts als Dienst auf eine Freigabe im Netz

Einrichten einer Festplatte mit FDISK unter Windows 95/98/98SE/Me

Studentische Lösung zum Übungsblatt Nr. 7

(Eine ausführliche Beschreibung der Batch-Umbenennen-Funktion finden Sie in der Anleitung [Link zur Anleitung m4 irfanview_batch].

2.1 Erstellung einer Gutschrift über den vollen Rechnungsbetrag

Software Qualität Übung 1

Einführung in die Programmierung

Programmieren in Java

Übungen Programmieren 1 Felix Rohrer. Übungen

Im Folgenden wird Ihnen an einem Beispiel erklärt, wie Sie Excel-Anlagen und Excel-Vorlagen erstellen können.

Kurzanleitung MAN E-Learning (WBT)

Abwesenheitsnotiz im Exchangeserver 2010

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

Konvertieren von Settingsdateien

Erstellen einer PostScript-Datei unter Windows XP

Anwendungsbeispiele Buchhaltung

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

Neuerungen in ReviPS Version 12g

Jetzt sollt ihr von der Vorlage der Grundversion 1.0 ein eigenes Textadventure erstellen.

Kurzanleitung zu. von Daniel Jettka

Einführung in die Informatik Tools

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Kapitalerhöhung - Verbuchung

SCHNELLEINSTIEG ZUM TOOL NODEBUILDER

Newsletter. 1 Erzbistum Köln Newsletter

Stammzertifikat Importieren

Installationsanleitung CLX.PayMaker Home

Anleitung zum Arbeiten mit Microsoft Visual Studio 2008 im Softwarepraktikum ET/IT

Software-Engineering Software-Management

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Visual Basic Express erstes Projekt anlegen

Dokumentieren mit Eclipse und Doxygen

TYPO3-Zusatzkurs für

Excel Pivot-Tabellen 2010 effektiv

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

368 4 Algorithmen und Datenstrukturen

Installationsanleitung trivum MusicServer Software Windows

Applet Firewall und Freigabe der Objekte

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Installation von NetBeans inkl. Glassfish Anwendungs-Server

DRM geschützte ebooks auf dem ipad

Anleitung zur Prüfung der digitalen Signatur mit Adobe Reader XI

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Objektorientierte Programmierung. Kapitel 12: Interfaces

Dokumentation Exchange

Mediumwechsel - VR-NetWorld Software

NODELOCKED LIZENZ generieren (ab ST4)

5.2 Neue Projekte erstellen

Microsoft PowerPoint 2013 Folien gemeinsam nutzen

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Office 2007 Umsteiger Präsentationen für unterwegs vorbereiten

Java Einführung Abstrakte Klassen und Interfaces

Eclipse 3.0 (Windows)

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Stapelverarbeitung Teil 1

1. Einführung. 2. Alternativen zu eigenen Auswertungen. 3. Erstellen eigener Tabellen-Auswertungen

Komponententest. Testen von Software Systemen. Übung 02 SS 2009 Version:

Datenmigration K1Max (Exchange)

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Schritt 1: Starten Sie Hidemyass, wählen Sie "IP: Port Proxies"

Überprüfung der digital signierten E-Rechnung

Seriendruck mit der Codex-Software

Einführung in die Java- Programmierung

1 Einleitung. Lernziele. Dokumente vergleichen. Änderungen mit Überarbeitungsfenster bearbeiten Lerndauer. 4 Minuten.

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Installationsanleitung CLX.PayMaker Office

Kostenstellen verwalten. Tipps & Tricks

Transkript:

Praktische Übung 'JUnit-Test' Starten Sie für die folgende Übung Eclipse und laden Sie das Testprojekt von folgender URL: http://pi.informatik.uni-siegen.de/berlik/swt/currency.zip Darin ist die Klasse Money implementiert, die Beträge einer bestimmten Währung addieren kann. Importieren Sie nun das Testprojekt (im Package Explorer rechte Maustaste / 'Import...' / 'General' / 'Existing Projects into Workspace' / 'Next >'. Unter 'Select archive file' per 'Browse...' das gespeicherte Testprojekt wählen, 'Finish'). Aufgabe 1: Schreiben Sie Tests für die Klasse Money. Am einfachsten erstellen Sie den Unit-Test über das Kontextmenü der Klasse Money.java: 'New >' / 'JUnit Test Case' / 'Finish'. Im folgenden Dialog dann das Hinzufügen von JUnit 4 zum build path per 'OK' bestätigen. Sie können den bereits erstellen Dummy-Test @Test public void test() { fail("not yet implemented"); nutzen und zu 'testadd' modifizieren. Vermutlich wird Ihr geschriebener Test fehlschlagen. Warum? Schreiben Sie dann erst die benötigten Tests für die equals Methode und danach die Methode selbst. Wenn alle Tests durchlaufen refaktorisieren Sie die Testfälle, indem Sie die Fixtures in setup auslagern. Experimentieren Sie ein wenig mit asserts, fail tests,...

Nachdem die Arbeit mit einer einfachen Währung also funktioniert, können wir anfangen Fälle mit mehreren Währungen zu bearbeiten. Das Problem ist aber, dass es für die Arithmetik mit gemischten Währung variable Wechselkurses gibt. Zur Vermeidung dieses Problems stellen wir ein MoneyBag bereit, der Währungsumrechnungen vermeidet. Werden zum Beispiel zu 12 Schweizer Franken 14 US-Dollar hinzugegeben, sind im Beutel beide Währungen vertreten, 12 CHF und 14 USD. Hinzufügen weiterer 10 Schweizer Franken ergibt einen Beutel mit 22 CHF und 14 USD. Der Gesamtwert eines MoneyBag kann später mit unterschiedlichen Wechselkursen und immer aktuell berechnet werden. Ein MoneyBag wird repräsentiert durch eine Liste von Währungen und bietet verschiedene Konstruktoren. Beachten Sie, dass die Konstruktoren privat sind, da MoneyBags hinter den Kulissen arbeiten, wenn Arithmetik mit Währung betrieben wird. public class MoneyBag implements IMoney { private Hashtable<String,Money> monies = new Hashtable<String,Money>(5); MoneyBag(Money m1, Money m2) { appendmoney(m1); appendmoney(m2); MoneyBag(Money bag[]) { for (Money money : bag) { appendmoney(money); private void appendmoney(money money) { Money m = (Money) monies.get(money.currency()); if (m!= null) { m = m.add(money); else { m = money; monies.put(money.currency(), m); Nach der Methode "code a little, test a little" erweiterten wir unsere Tests mit JUnit und stellen sicher, dass alles immer noch funktioniert. Aufgabe 2: Schreiben Sie Tests für die Klasse MoneyBag. Sie werden bei Ihren Tests wahrscheinlich die equals Methode nutzen wollen. Implementieren Sie diese und testen Sie sie. Mit dem MoneyBag können wir jetzt die Add-Methode in Money überarbeiten: public Money add(money m) { if (m.currency().equals(currency()) ) return new Money(amount()+m.amount(), currency()); return new MoneyBag(this, m); Wie oben definiert wird sich diese Methode nicht kompilieren lassen, da sie ein Money und nicht einen MoneyBag als Rückgabewert erwartet. Mit der Einführung des MoneyBag gibt es nun zwei Darstellungen für Gelder, die wir gerne verstecken würden. Dazu stellen wir eine Schnittstelle IMoney bereit, die beide Darstellungen realisiert und von den Klassen Money und MoneyBag implementiert wird. Hier ist die IMoney Schnittstelle:

public interface IMoney { public abstract IMoney add(imoney amoney); //... Um die unterschiedlichen Darstellungen vollständig vor dem Nutzer zu verstecken, müssen alle Kombinationen des Hinzufügens von Geldern und MoneyBags unterstützt werden. Aufgabe 3: Schreiben Sie Tests und Methoden, um die verschiedenen Varianten von add für alle Kombinationen von Money und MoneyBag verarbeiten zu können. testmixedsimpleadd - zwei unterschiedliche Währungen testbagsimpleadd - ein MoneyBag zu einem Money testsimplebagadd - ein Money zu einem MoneyBag testbagbagadd - zwei MoneyBags (Nachfolgend zum Vergleich die Referenzimplementierung der benötigten Klassen ohne die Unit- Tests.) Klasse Money class Money implements IMoney{ private int famount; private String fcurrency; public Money(int amount, String currency) { famount = amount; fcurrency = currency; public int amount() { return famount; public String currency() { return fcurrency; public IMoney add(imoney m) { return m.addmoney(this); public IMoney addmoney(money m) { if (m.fcurrency.equals(fcurrency) ) { return new Money(fAmount+m.fAmount, fcurrency); return new MoneyBag(this, m); public IMoney addmoneybag(moneybag s) { return s.addmoney(this); public boolean equals(object anobject) { if (anobject instanceof Money) {

Money amoney = (Money)anObject; return amoney.currency().equals(currency()) && amount() == amoney.amount(); return false; Klasse MoneyBag import java.util.hashset; import java.util.hashtable; import java.util.set; public class MoneyBag implements IMoney { private Hashtable<String,Money> monies = new Hashtable<String,Money>(5); MoneyBag(Money m1, Money m2) { appendmoney(m1); appendmoney(m2); MoneyBag(Money bag[]) { for (Money money : bag) { appendmoney(money); MoneyBag(Money m, MoneyBag bag) { appendmoney(m); appendbag(bag); MoneyBag(MoneyBag m1, MoneyBag m2) { appendbag(m1); appendbag(m2); public IMoney add(imoney m) { return m.addmoneybag(this); public IMoney addmoney(money m) { return new MoneyBag(m, this); public IMoney addmoneybag(moneybag s) { return new MoneyBag(s, this); private void appendmoney(money money) { Money m = monies.get(money.currency()); if (m!= null) { m = (Money)m.add(money); else { m = money; monies.put(money.currency(), m);

private void appendbag(moneybag abag) { for (Money m: monies.values()) { appendmoney(m); public boolean equals(object anobject) { if (!(anobject instanceof MoneyBag)) { return false; Set<Money> mymoneyset = new HashSet<Money>(monies.values()); MoneyBag other = (MoneyBag) anobject; Set<Money> othermoneyset = new HashSet<Money>(other.monies.values()); return mymoneyset.equals(othermoneyset); Interface IMoney public interface IMoney { public abstract IMoney add(imoney amoney); IMoney addmoney(money amoney); IMoney addmoneybag(moneybag amoneybag);