zur Startseite

Mock Creator Alte Version 0.1


 Home
 Kontakt
+Kompetenz
+Projekte
-MockCreator
  Eclipse 2
  VisualAge 4
  Standalone
  Version 0.1
  Download
 Xpedition
 Impressum
 Feedback


 deutschenglish



download      english text

Diese Dokumentation ist für die alte Version 0.1 und aus "historischen Gründen" noch enthalten. Bitte nutzen Sie die aktuelle Version.

Der Mock Creator wurde von Christian Junghans bei abstrakt entwickelt. Er dient dazu in Java Mockobjekte von Interfaces zu generieren. Er wurde für die Versionen 3 von VisualAge entwickelt. Getestet ist er derzeit für 3.02, 3.53 und 4.0. Zur Zeit ist der MockCreator im Beta- Stadium. Es handelt sich um freie Software, wir übernehmen keine Garantie für irgendwelche Probleme die sich aus seiner Nutzung ergeben.

Neue Version in Vorbereitung

Die neue Version enthält viele kleine Verbesserungen und erlaubt die Formulierung von "Expectation-Blöcken" in beliebiger Reihenfolge. Behalten Sie diese Seiten im Auge oder registrieren Sie sich in der Mailingliste bei yahoogroups. Mitglieder dieser Liste bekommen alle Ankündigungen sofort.

Wir haben uns entschlossen, die neue Version zunächst intern zu testen um zu sehen, ob der neu-generierte Code (Blöcke von erwarteten Methodenaufrufen in beliebiger Reihenfolge) sinnvoll verwendet werden kann. Die Veröffentlichung ist für Ende Mai 2002 geplant.

Verwendung:

Um ein Mockobjekt anzulegen muss lediglich ein Interface in VisualAge angewählt und mit der rechten Maustatste MockObjectCreator/Create MockObject angewählt werden. Im daraufhin erscheinenden Dialog kann das Package gewählt werden, in dem das MockObject erstellt werden soll:

anklicken, um gross anzuzeigen

Funktionsweise

Der Mock Creator erstellt Mockobjekte, die das gewählte Interface implementieren. Im Test werden die Aufrufe die auf den Mockobjekten erwartet werden in folgender Form angegeben. Wir erwarten in diesem Fall, dass auf einer mitgegebenen Liste die Funktion get(1) aufgerufen wird, d.h. das zweite Objekt aus der Liste ausgelesen werden soll.

MockList mockListe = new MockList();
mockListe.expectGet( 1, "Eintrag 1" );
TestKlasse testObjekt = new TestKlasse( mockListe );
testObjekt.zuTestendeMethode();
mockListe.verify();

Zu der gelieferten Software wird eine Testsuite geliefert, die als Beispiel für die Verwendung der generierten Mockklassen dienen kann.

Jeder Aufruf einer expect-Methode (hier expectGet) speichert ein Objekt-Array mit Methodenname und Paramaetern in einer ExpectationList -> mockobjects und den Rückgabewert (hier "Eintrag 1") in eine Liste von Rückgabewerten.

Jeder Methodenaufruf vom zu testenden Objekt auf dem Mockobjekt vergleicht den Aufruf mit dem zuvor im Test als erwartet angegebenen Aufruf.

Um auch Fehlerfälle testen zu können generiert der MockCreator zu jeder Methode im Interface zwei expect-Methoden in der folgenden Form (hier für die Methode "methodCall"):

 
public void expectMethodCall
               ( [alle Parameter] 
                 [, Rückgabewert sofern 
                         nicht void] 
               ); 
public void expectMethodCall
               ( [alle Parameter] 
                 [, Throwable der bei Aufruf 
                         geworfen wird] 
               ); 

Mit Hilfe der zweiten Version ist es möglich, auch einen Fehlerfall im Test zu simulieren. Die Mock-Implementation gibt in diesem Fall bei Aufruf keinen Rückgabewert zurück, sondern löst die übergebene Exception aus. Hierbei ist die Schnittstelle zu beachten: Sofern nicht im Interface eine Exception deklariert ist, können hier nur RuntimeExceptions und Errors angegeben werden, da sonst während des Tests eine ClassCastException auftritt. Wenn das Interface Exceptions deklariert, können natürlich auch die deklarierten Exceptions als Werte für den Parameter Throwable verwendet werden.

Installation

Um den Mock Creator zu verwenden muss die Datei mockcreator01.zip in das Verzeichnis ide/tools entpackt werden. Wichtig ist es darauf zu achten, dass die Verzeichnisstruktur erhalten bleibt. Danach muss VisualAge neu gestartet werden.

Bevor das erste MockObjekt erstellt werden kann müssen die zwei Klassen aus dem Jar-File de_abstrakt_mock.jar in VisualAge importiert werden. Das Jar-File enthält die Basisklasse für die generierten Mockobjekte und eine ExpectationList die leicht abgewandelt wurde um eine AssertionFailedError zu werfen, wenn auf dem Mockobjekt Methoden aufgerufen wurden, die im Test nicht erwartet werden.

Eine weitere Voraussetzung ist der import des packages com.mockobjects das von Sourceforge geladen werden kann. Es enthält die Basisklasse für die ExpectationList.

Features

  • Generiert vollständige Mockobjekte auch von Interface-Hierarchien
  • Generiert zu jedem Methodenaufruf eine das Interface implementierende Methode und zwei expect Methoden s.u.
  • Richtigkeit der Methodenaufrufe kann automatisch über verify überprüft werden
  • Wenn der Sourcecode im Repository zur Verfügung steht, werden die Namen der Parameter verwendet
  • Wenn der Sourcecode im Repository nicht zur Verfügung steht (Import eines class-Files), wird das Mockobjekt aufgrund der im Bytecode verfügbaren Definition generiert.
  • Umsonst + Open Source

Geplante Features für nächste Releases

  • Mehr Dokumentation
  • Blöcke von Methodenaufrufen deren Reihenfolge gleichgültig ist kennzeichnen
  • Erweitern von bereits generierten Mockobjekten um neu zum Interface hinzugekommene Methoden
  • Erstellen von Mockobjekten auf der Basis von konkreten und abstrakten Klassen statt Interfaces.
  • Erstellung einer von VisualAge unabhängigen Version

Lasst uns doch wissen welche davon ihr für sinnvoll haltet oder was ihr sonst vermisst

Support

Der Autor ist erreichbar unter mockcreator@abstrakt.de. Außerdem ist eine Mailingliste auf http://groups.yahoo.com/group/mockcreator eingerichtet.

Schwierigkeiten

Das speichern der generierten MockObjekte dauert leider sehr lange, grade bei umfangreicheren Interfaces.

Lizenz

Der MockCreator steht unter der GNU General Public License (GPL), die zu importierenden Klassen im Package de.abstrakt.mock stehen unter der GNU Lesser General Public License (LGPL). Dadurch sind die generierten Klassen auch in "closed source"-Projekten verwendbar.
Die von unserer Software verwendete Software (com.mockobjects.*) ist hiervon nicht betroffen. Sie muss separat bezogen werden und steht (derzeit) unter der Apache-Lizenz.

Und hier noch der Standardtext:

Copyright (C) 2001 abstrakt gmbh

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.