Zum Inhalt springen

EasyMock

aus Wikipedia, der freien Enzyklopädie
{{#if: | | {{#invoke:WLink|getArticleBase}} }}

{{#if: EasyMock Logo |

colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | EasyMock Logo |
 {{#if: {{#invoke:Wikidata|claim|P154}} | 
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
 }}

}}{{#if: |

{{#if: |
}}|

}}

Basisdaten

{{#if: Tammo Freese, Henri Tremblay |

Hauptentwickler
 {{#if: {{#invoke:Wikidata|claim|P126}} | 
Maintainer claim|P126|parameter=link|references=ja|list=, }}
 }}

}}{{#if: OFFIS, Tammo Freese, Henri Tremblay |

Entwickler OFFIS, Tammo Freese, Henri Tremblay |
 {{#if: {{#invoke:Wikidata|claim|P178}} | 
Entwickler claim|P178|parameter=link|references=ja|list=, }}
 }}

}}{{#if: |

Erscheinungsjahr
 {{#if: {{#invoke:Wikidata|claim|P577}} | 
Erscheinungsjahr claim|P577|references=ja|list=, }} |
   {{#if: {{#invoke:Wikidata|claim|P571}} | 
Erscheinungsjahr claim|P571|references=ja|list=, }}
   }}
 }}

}}{{#ifeq: | KEINE_ANGABE || {{#if: |

Aktuelle Version
({{#if: | Vorlage:Datum – die Form mit drei unbenannten Parametern oder anderen einzelnen Zeiteinheiten ist veraltet und wird nicht mehr unterstützt. Bitte gib das Datum einfach im Klartext an.
format | {{#timefl:now|date}}}} {{{2}}} | T._Monat JJJJ}} lang= {{#switch: -|=de #default=de-AT
            }}
   }}

}}) }}

 {{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813}} | 
Aktuelle Version claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|references=ja}} {{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|qualifier=P577}} |
({{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|qualifier=P577}}) }}}}}}

}}{{#ifeq: | KEINE_ANGABE || {{#if: |

Aktuelle Vorabversion
({{#if: | Vorlage:Datum – die Form mit drei unbenannten Parametern oder anderen einzelnen Zeiteinheiten ist veraltet und wird nicht mehr unterstützt. Bitte gib das Datum einfach im Klartext an.
format | {{#timefl:now|date}}}} {{{2}}} | T._Monat JJJJ}} lang= {{#switch: -|=de #default=de-AT
            }}
   }}

}}) }}

 {{#if: {{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724}} | 
Aktuelle Vorabversion claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|references=ja}} {{#if: {{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|qualifier=P577}} |
({{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|qualifier=P577}}) }}}}}}

}}{{#if: |

Ausführungsumgebung
 {{#if: Plattformübergreifend | 
Betriebssystem Plattformübergreifend |
   {{#if: {{#invoke:Wikidata|claim|P306}} | 
Betriebssystem claim|P306|parameter=link|references=ja|list=, }}
   }}
 }}

}}{{#if: Java |

Programmier­sprache Java |
 {{#if: {{#invoke:Wikidata|claim|P277}} | 
Programmier­sprache claim|P277|parameter=link|references=ja|list=, }}
 }}

}}{{#if: Test-Framework |

Kategorie Test-Framework

}}{{#if: Apache-Lizenz 2.0 |

Lizenz Apache-Lizenz 2.0 |
 {{#if: {{#invoke:Wikidata|claim|P275}} | 
Lizenz claim|P275|parameter=link|references=ja|list=, }}
 }}

}}{{#if: |

deutschsprachig faculty|}} | ja | nein }}

}}{{#if: |

Sonstiges {{{Sonstiges}}}Vorlage:Infobox Software/Wartung/Sonstiges

}}{{#if: easymock.org |

easymock.org |
 {{#if: {{#invoke:Wikidata|claim|P856|notdeprecated=1}} | 
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link|notdeprecated=1}}}}
 }}

}}{{#if: |

Dateien [[c:Category:Created with |]]

}}

EasyMock ist eine Programmbibliothek zum Erstellen von Mock-Objekten für Unit-Tests von Java-Programmen.

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.<ref>EasyMock Homepage.</ref> 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 von 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 einen Unit Test soll das Verhalten der Service Klasse KundeService verifiziert werden. Diese Klasse hat eine Referenz zu einer Hilfsklasse KundeDAO, welche die Kundendaten aus einer Datenbank liest. Das Data Access Object KundeDAO muss durch ein Mock-Objekt ersetzt werden, um die Klasse KundeService isoliert testen zu können.

Für den ersten Schritt wird die setUp()-Methode des JUnit-Tests überschrieben: <syntaxhighlight lang="java">

 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);
 }

</syntaxhighlight>

Die Schritte 2 und 3 werden in der Test-Methode ausgeführt: <syntaxhighlight lang="java">

 @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);
 }

</syntaxhighlight>

Alternativen

Als Alternative zu EasyMock existieren die folgenden Programmbibliotheken, die ebenfalls das dynamische Erzeugen von Mock-Objekten erlauben:

Literatur

  • {{#invoke:Vorlage:Literatur|f}}
  • {{#invoke:Vorlage:Literatur|f}}
  • {{#invoke:Vorlage:Literatur|f}}
  • {{#invoke:Vorlage:Literatur|f}}

Weblinks

Einzelnachweise

<references />