1 / 12

Testen mit Mock-Objekten

Testen mit Mock-Objekten. Andreas Höfer Dr. Matthias Müller. Mockdummystub-Objekt?. Ein Stub ersetzt geplante, noch nicht implementierte Funktionalität. Ein Dummy-Objekt ersetzt eine echte Implementierung für Testzwecke.

Download Presentation

Testen mit Mock-Objekten

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Testen mit Mock-Objekten Andreas Höfer Dr. Matthias Müller

  2. Mockdummystub-Objekt? • Ein Stub ersetzt geplante, noch nicht implementierte Funktionalität. • Ein Dummy-Objekt ersetzt eine echte Implementierung für Testzwecke. • Ein Mock-Objekt ersetzt eine echte Implementierung und verifiziert korrektes Verhalten des Klienten. • Oft wird in der Literatur nicht sauber unterschieden. 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 • Reduzieren Abhängigkeiten • Reduzieren Wartezeiten • Kapseln/beschreiben erwartetes Verhalten • Fördern Programmierung gegen Schnittstellen 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 dupliziert Anwendungslogik • Echte Objekte leicht(er) verwendbar • Mock-Objekt ruft andere Mock-Objekte auf Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller

  5. Testmuster für Mock-Objekte • Instanzen der Mock-Objekte erstellen • Zustände der Mock-Objekte setzen • Erwartete Werte der Mock-Objekte setzen • Anwendungscode mit Mock-Objekten als Parameter aufrufen • Verifizieren der erwarteten Werte in den Mock-Objekten 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(); } 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 String EXPECTED_ORDER = "open()\ngetFreeCapacity()\nrefuel()\nclose()\n"; private String order = ""; public void open() { order += "open()\n"; } public void close() { order += "close()\n"; } public double getFreeCapacity() { order += "getFreeCapacity()\n"; return FREE_CAPACITY; } … Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller

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

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

  12. Referenzen • Johannes LinkSoftwaretests mit JUnit2. Auflage, dpunkt.verlag, 2005 • Tim Mackinnon, Steve Freeman, Philip CraigEndo-Testing: Unit-Testing with Mock ObjectsXP2000 Konferenz, 2000 • Erich Gamma et al. Design PatternsAddison-Wesley, 1995 Testtechniken-Praktikum WS 2005/06 Andreas Höfer – Dr. Matthias Müller

More Related