Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller.

Ähnliche Präsentationen


Präsentation zum Thema: "Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller."—  Präsentation transkript:

1 Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller

2 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 2 Mockdummystub-Objekt? Ein Stub ersetzt geplante, noch nicht implementierte Funktionalität. Ein Stub ersetzt geplante, noch nicht implementierte Funktionalität. Ein Dummy-Objekt ersetzt eine echte Implementierung für Testzwecke. Ein Dummy-Objekt ersetzt eine echte Implementierung für Testzwecke. Ein Mock-Objekt ersetzt eine echte Implementierung und verifiziert korrektes Verhalten des Klienten. Ein Mock-Objekt ersetzt eine echte Implementierung und verifiziert korrektes Verhalten des Klienten. Oft wird in der Literatur nicht sauber unterschieden. Oft wird in der Literatur nicht sauber unterschieden.

3 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 3 Vorteile von Mock- Objekten Gut zum Testen von Protokollen, der richtigen Reihenfolge von Methodenaufrufen und den dabei übergebenen Parametern Gut zum Testen von Protokollen, der richtigen Reihenfolge von Methodenaufrufen und den dabei übergebenen Parametern Reduzieren Abhängigkeiten Reduzieren Abhängigkeiten Reduzieren Wartezeiten Reduzieren Wartezeiten Kapseln/beschreiben erwartetes Verhalten Kapseln/beschreiben erwartetes Verhalten Fördern Programmierung gegen Schnittstellen Fördern Programmierung gegen Schnittstellen

4 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 4 Indikatoren gegen das Testen mit Mock-Objekten Mock-Objekt enthält viel Logik statt fest verdrahteter Werte Mock-Objekt enthält viel Logik statt fest verdrahteter Werte Mock-Objekt dupliziert Anwendungslogik Mock-Objekt dupliziert Anwendungslogik Echte Objekte leicht(er) verwendbar Echte Objekte leicht(er) verwendbar Mock-Objekt ruft andere Mock-Objekte auf Mock-Objekt ruft andere Mock-Objekte auf

5 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 5 Testmuster für Mock- Objekte Instanzen der Mock-Objekte erstellen Instanzen der Mock-Objekte erstellen Zustände der Mock-Objekte setzen Zustände der Mock-Objekte setzen Erwartete Werte der Mock-Objekte setzen Erwartete Werte der Mock-Objekte setzen Anwendungscode mit Mock-Objekten als Parameter aufrufen Anwendungscode mit Mock-Objekten als Parameter aufrufen Verifizieren der erwarteten Werte in den Mock- Objekten Verifizieren der erwarteten Werte in den Mock- Objekten

6 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 6 Tank public interface Tank { public void open(); public void close(); public void refuel(double amount) throws TankOverflowException; public double getFreeCapacity(); }

7 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 7 MockTank (1/2) public class MockTank implements Tank { private final static double FREE_CAPACITY = 1; private final static double FREE_CAPACITY = 1; private final static String EXPECTED_ORDER = "open()\ngetFreeCapacity()\nrefuel()\nclose()\n"; private final static String EXPECTED_ORDER = "open()\ngetFreeCapacity()\nrefuel()\nclose()\n"; private String order = ""; private String order = ""; public void open() { order += "open()\n"; } public void open() { order += "open()\n"; } public void close() { order += "close()\n"; } public void close() { order += "close()\n"; } public double getFreeCapacity() { public double getFreeCapacity() { order += "getFreeCapacity()\n"; order += "getFreeCapacity()\n"; return FREE_CAPACITY; } return FREE_CAPACITY; } …

8 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 8 MockTank (2/2) public double getFreeCapacity() { order += "getFreeCapacity()\n"; return FREE_CAPACITY; } public void refuel(double amount) throws TankOverflowException { order += "refuel()\n"; Assert.assertTrue( Assert.assertTrue( "Tanker must avoid spillage.", amount <= FREE_CAPACITY); } public void verify() { Assert.assertEquals(EXPECTED_ORDER, order); }}

9 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 9 OilTankerTest public class OilTankerTest extends TestCase { public void testCompleteRefueling() throws Exception { MockTank mock = new MockTank(); OilTanker.refuelCompletely(mock);mock.verify();}}

10 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 10 OilTanker public class OilTanker { public static void refuelCompletely(Tank tank) throws TankOverflowException { tank.open(); double amount = tank.getFreeCapacity(); tank.refuel(amount);tank.close();}}

11 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 11 Besucher-Entwurfsmuster KlientObjektStruktur > Besucher besucheElementA(ElementA) besucheElementB(ElementB) Besucher1 besucheElementA(ElementA) besucheElementB(ElementB) Besucher2 besucheElementA(ElementA) besucheElementB(ElementB) > Element akzeptiere(Besucher) ElementA operationA() akzeptiere(Besucher b) ElementB operationB() akzeptiere(Besucher b) b.besucheElementA(this)b.besucheElementB(this)

12 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller 12 Referenzen Johannes Link Softwaretests mit JUnit 2. Auflage, dpunkt.verlag, 2005 Johannes Link Softwaretests mit JUnit 2. Auflage, dpunkt.verlag, 2005 Tim Mackinnon, Steve Freeman, Philip Craig Endo-Testing: Unit-Testing with Mock Objects XP2000 Konferenz, 2000 Tim Mackinnon, Steve Freeman, Philip Craig Endo-Testing: Unit-Testing with Mock Objects XP2000 Konferenz, 2000 Erich Gamma et al. Design Patterns Addison-Wesley, 1995 Erich Gamma et al. Design Patterns Addison-Wesley, 1995


Herunterladen ppt "Testtechniken-Praktikum WS 2005/06 1 Testen mit Mock- Objekten Andreas Höfer Dr. Matthias Müller."

Ähnliche Präsentationen


Google-Anzeigen