© Excellent backgrounds/Shutterstock.com
Warum Tests notwendig sind

Automatisches Testen von Transformationen


In einem Kundenprojekt stellen wir Web Services für Fat-Clients zur Verfügung. Eine der Anforderungen ist es, verschiedene Versionen von Clients durch den Server zu unterstützen. Wir verwenden daher Data Transfer Objects (DTOs), die in der Service-Facade auf das ­Domainmodell gemappt werden. Solche Mappings bereiten im Allgemeinen wenig Freude. Man kann manuelle Getter-/Setter-Orgien über Attribute veranstalten, die zu 98 Prozent gleich heißen oder einen Ansatz per Reflection wählen. Wir sind natürlich nicht die ersten, die das Problem hatten, und so wählten wir Dozer [1] als Mapping-Tool. Darüber hinaus wollen wir sicher sein, dass die Mappings korrekt konfiguriert wurden und potenzielle Probleme wegen Klassenänderungen (z. B. durch Refactoring) möglichst früh erkennen. Daraus ergibt sich die Notwendigkeit von Tests. Wie diese automatisiert werden können, stellen wir hier vor.

Dozer ist ein Java Bean to Bean Mapper, der Objekte von komplexen Typen automatisch ineinander umwandelt. Dozer unterstützt einfaches und komplexes Feldermapping, bidirektionales und rekursives Mapping, Mapping von Collections sowie benutzerdefinierte Mappings. Nehmen wir an, wir haben eine einfache Personenklasse mit dazu passendem DTO.

Listing 1

public class Person { private String vorname; private String nachname; private int alter;  // getter/setter } und public class PersonDTO { private String vorname; private String nachname; private int alter; // getter/setter }

Mittels Dozer können wir die Transformation in einer Codezeile schreiben:

Person person = new DozerBeanMapper().map(personDTO, Person.class);

Coole Sache. Allerdings sollte man aus Performancegründen den Mapper nicht jedes Mal neu erzeugen, aber in diesem Artikel geht es uns nicht um ein Dozer-Tutorial. Die Frage, die wir uns stellen, ist: „Müssen wir diese Zeile testen?“ Und wenn ja, wie? Die Antworten gehen von „Du musst alles testen!“ bis zu „Das würde ja heißen, ich teste Dozer. Warum sollte ich das in meinem Projekt tun?“ bis zu „No Risk, no Fun!“ Also sehen wir uns einmal näher an, was so schiefgehen kann.

Wenn DTOs und Domainobjekte die gleiche Struktur haben, können wir diese Mappings sorglos verwenden. Das bleibt aber nicht so. Sobald wir einen neuen Service implementieren, welcher eine neue Version von Person verwendet, ist eine Erweiterung unserer Domänenklasse und eine neue Version des DTOs notwendig. Dabei müssen wir auch garantieren, dass die bestehenden Mappings nicht beschädigt werden. Mit anderen W...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang