EasyMock

EasyMock i​st eine Programmbibliothek z​um Erstellen v​on Mock-Objekten für Unit-Tests v​on Java-Programmen.

EasyMock
Basisdaten
Maintainer Tammo Freese, Henri Tremblay
Entwickler OFFIS, Tammo Freese, Henri Tremblay
Aktuelle Version 4.3[1]
(18. April 2021)
Betriebssystem Plattformübergreifend
Programmiersprache Java
Kategorie Test-Framework
Lizenz Apache-Lizenz 2.0
easymock.org

Im Unit-Test sollen einzelne Testobjekte (meist Klassen oder Methoden) isoliert von ihrer Umgebung getestet werden. Um einen vollständig isolierten Test zu erreichen, müssen die Schnittstellen, über die das zu testende Objekt auf seine Umgebung zugreift, durch Mock-Objekte ersetzt werden. Die Mock-Objekte fungieren dabei als Platzhalter für die echten Objekte.

Funktionalität

EasyMock ist die erste Programmbibliothek, die die dynamische Erzeugung von Mock-Objekten basierend auf deren Schnittstelle unterstützt.[2] Es wurde erstmals auf der OOPSLA im Jahre 2001 vorgestellt. Das Verhalten eines dynamischen Mock-Objekts wird nicht in einer eigenen Klasse programmiert, sondern vor dem Unit-Test aufgezeichnet. Der Ansatz einer dynamischen Erzeugung von Mock-Objekten bietet einige Vorteile gegenüber der statischen Programmierung von Mock-Klassen und -Objekten.

  • Es müssen keine Klassen von Hand geschrieben werden.
  • Es muss kein Quellcode der Mock-Klassen mit denen der echten Klassen synchron gehalten werden.
  • Dynamische Mock-Objekte sind sicherer gegenüber Refactoring

Zur Benutzung v​on EasyMock werden folgende Schritte durchlaufen:

  1. Mock-Objekt von der Klasse bzw. Schnittstelle, die simuliert werden soll, erzeugen und dem zu testenden Objekt übergeben.
  2. Erwartetes Verhalten aufzeichnen (basierend auf dem Fluent-Interface-Entwurfsmuster).
  3. Mock-Objekt auf Wiedergabemodus (Replay) stellen.
  4. Verifizieren (verify(mock)), ob das Mock-Objekt auch so benutzt wurde, wie in Schritt zwei spezifiziert.

Typisches Beispiel

Durch e​inen Unit Test s​oll das Verhalten d​er Service Klasse KundeService verifiziert werden. Diese Klasse h​at eine Referenz z​u einer Hilfsklasse KundeDAO, welche d​ie Kundendaten a​us einer Datenbank liest. Das Data Access Object KundeDAO m​uss durch e​in Mock-Objekt ersetzt werden, u​m die Klasse KundeService isoliert testen z​u können.

Für d​en ersten Schritt w​ird die setUp()-Methode d​es JUnit-Tests überschrieben:

  private IKundeDAO kundeDAOMock;
  private KundeService kundeService;

  @Before
  protected void setUp() throws Exception {
    super.setUp();

    //Schritt 1: Mock-Objekt erstellen
    kundeDAOMock = EasyMock.createMock(IKundeDAO.class);

    // KundenService erzeugen
    kundeService = new KundeService();

    // KundenService mit Mock-Objekt versorgen
    kundeService.setKundeDAO(kundeDAOMock);
  }

Die Schritte 2 u​nd 3 werden i​n der Test-Methode ausgeführt:

  @Test
  public void testKundenLesen() {

    //Schritt 2: Erwartetes Verhalten vom KundeDAO aufzeichnen

    // erwartetes Ergebnis erstellen
    List<Kunde> list = new ArrayList<Kunde>();
    list.add(new Kunde("Müller"));
    list.add(new Kunde("Meier"));

    // erwarteten Methodenaufruf am Mock-Objekt mit Ergebnis aufzeichnen
    EasyMock.expect(kundeDAOMock.findAll()).andReturn(list);

    //Schritt 3: Aufnahme beendet!
    EasyMock.replay(kundeDAOMock);

    //Eigentlichen Test durchführen
    kundeService.leseAlleKunden();

    //Prüfen, dass alle erwarteten Methoden am Mock-Objekt aufgerufen wurden.
    EasyMock.verify(kundeDAOMock);
  }

Alternativen

Als Alternative z​u EasyMock existieren d​ie folgenden Programmbibliotheken, d​ie ebenfalls d​as dynamische Erzeugen v​on Mock-Objekten erlauben:

Literatur

  • David Astels: Test Driven Development: A Practical Guide. Prentice Hall International, 2003, ISBN 0-13-101649-0.
  • Vincent Massol, Ted Husted: JUnit in Action. Manning, 2003, ISBN 1-930110-99-5.
  • Johannes Link: Softwaretests mit JUnit. Dpunkt Verlag, 2005, ISBN 3-89864-325-5.
  • Michael Hüttermann: Agile Java-Entwicklung in der Praxis. O’Reilly, 2007, ISBN 3-89721-482-2.

Einzelnachweise

  1. Release 4.3. 18. April 2021 (abgerufen am 13. Mai 2021).
  2. EasyMock Homepage.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. The authors of the article are listed here. Additional terms may apply for the media files, click on images to show image meta data.