Mockito
| mockito
| |
|---|---|
| colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | Mockito Logo | |
| Basisdaten
| |
| Hauptentwickler | Szczepan Faber |
| Entwickler | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Erscheinungsjahr | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Aktuelle Version | 5.9.0 (Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden.) |
| Aktuelle Vorabversion | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. (Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden.) |
| Betriebssystem | Plattformübergreifend |
| Programmiersprache | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Kategorie | Test-Framework |
| Lizenz | Skriptfehler: Ein solches Modul „Wikidata“ ist nicht vorhanden. |
| Skriptfehler: Ein solches Modul „WLink“ ist nicht vorhanden. | |
Mockito ist eine freie (MIT-Lizenz) Programmbibliothek zum Erstellen von Mock-Objekten für Unit-Tests von Java-Programmen.
Funktionalität[Bearbeiten]
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. Mockito hilft dabei dem Entwickler der Unit-Tests, diese Mock-Objekte samt ihrem Verhalten zu generieren und gegebenenfalls auch zu prüfen, wie diese vom zu testenden Code aufgerufen wurden. Die Mock-Objekte werden dabei ähnlich wie bei anderen Mocking-Frameworks zur Laufzeit dynamisch generiert. Es müssen somit keine Klassen von Hand geschrieben oder deren Quellcode mit denen der echten Klassen synchron gehalten werden. Dynamische Mock-Objekte sind somit sicherer gegenüber Refactoring. Mittels Mockito können Klassen und Interfaces gleichermaßen gemockt werden.
Mockito unterscheidet sich von anderen Mocking-Frameworks insofern, als mit Mockito die Entwickler das Verhalten des zu testenden Systems verifizieren können, ohne im Vorfeld diesbezügliche Annahmen zu treffen.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Damit wird die oft kritisierte enge Kopplung von Unit-Tests an den getesteten Code<ref>Martin Fowler: Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden. ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> reduziert.
Geschichte[Bearbeiten]
Das mockito-Projekt wurde 2007 ins Leben gerufen vom Programmierer Szczepan Faber, der mit der Komplexität vorhandener Mocking-Frameworks unzufrieden war. Er begann mit der Erweiterung der Syntax und Funktionalität von EasyMock – einem ähnlichen Mocking-Framework für Java – schrieb aber schlussendlich den meisten Code für Mockito um.<ref>Szczepan Faber: [Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden.] Skriptfehler: Ein solches Modul „DateTime“ ist nicht vorhanden., archiviert vom Vorlage:Referrer (nicht mehr online verfügbar) am 2010-03-29 (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref> Die erste Version von Mockito wurde Anfang 2008 für ein Projekt beim The Guardian in London verwendet.<ref>Skriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. simpler & better mockingSkriptfehler: Ein solches Modul „Vorlage:Internetquelle“ ist nicht vorhanden. Ehemals im Vorlage:Referrer (nicht mehr online verfügbar) (Skriptfehler: Ein solches Modul „Multilingual“ ist nicht vorhanden.).Vorlage:Toter Link/Core (Seite nicht mehr abrufbar. Suche im Internet Archive)Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.Skriptfehler: Ein solches Modul „TemplatePar“ ist nicht vorhanden.</ref>
Verwendung[Bearbeiten]
Eine mögliche Verwendung von Mockito kann wie folgt aussehen:
- Klasse, die getestet werden soll:
<syntaxhighlight lang="java" style="margin-left:2em"> class CustomerService {
private List<Customer> customers;
public CustomerService(List<Customers> initialCustomers) {
this.customers = initialCustomers;
}
public void addCustomer(Customer customer) {
this.customers.add(customer);
}
public void deleteAllCustomers() {
this.customers.clear();
}
} </syntaxhighlight>
- Mock-Objekt von der Klasse bzw. Schnittstelle, die simuliert werden soll, erzeugen:
<syntaxhighlight lang="java" style="margin-left:2em"> List mockedCustomerList = mock(List.class); </syntaxhighlight>
- Mock-Objekt im Unit-Test benutzen:
<syntaxhighlight lang="java" style="margin-left:2em"> CustomerService customerService= new CustomerService(mockedCustomerList); Customer customerToAdd = new Customer("Max Mustermann"); customerService.addCustomer(customerToAdd); customerService.deleteAllCustomers(); </syntaxhighlight>
- Verifizieren, ob das Mock-Objekt von den Methoden
CustomerService.addCustomerundCustomerService.deleteAllCustomersso benutzt wurde, wie vorgesehen:
<syntaxhighlight lang="java" style="margin-left:2em"> verify(mockedCustomerList).add(customerToAdd); verify(mockedCustomerList).clear(); </syntaxhighlight>
Siehe auch[Bearbeiten]
Weblinks[Bearbeiten]
- Offizielle Webpräsenz
- Mockito bei Github
Einzelnachweise[Bearbeiten]
<references />