Domain Object (
russisch. "Domain Object" ) - einer der beliebtesten Ansätze zur Verwendung von Testdaten direkt in der Skriptlogik. Derzeit ist es aufgrund seiner
Einfachheit, Verständlichkeit und Logik einer der beliebtesten und am weitesten verbreiteten Ansätze
.Es ist für alle Arten der Automatisierung von Funktionstests (End-to-End, API, Integration) anwendbar, unabhängig von der getesteten Plattform, ob Web, Mobile oder Desktop.
WICHTIG : Verwechseln Sie Domain Object nicht mit Data Transfer Object (DTO) . Dies sind völlig unterschiedliche Ansätze, die in verschiedenen Bereichen angewendet werden.
Was ist seine Essenz?Aus einem anderen Namen des Ansatzes - „Geschäftsobjekt“ - wird deutlich, dass dies eine Art Abstraktion ist, bei der es sich um ein Modell und eine Beschreibung des Objekts handelt, die für das Verständnis und die Funktionsweise der
Geschäftslogik der Anwendung wichtig sind. Es ist nicht in der Lage, andere Funktionen als das „Übertragen“ von Feldern und deren Werten an einen bestimmten Geschäftsbereich auszuführen.

Wie sieht es aus?
Nehmen Sie als Beispiel eine Anwendung, die die Erstellung eines Benutzerkontos vorsieht. Es ist der Benutzer, der unser Domain-Objekt wird. In fast allen Fällen muss der Benutzer einen Benutzernamen und ein Passwort haben:
Besonders vorsichtige werden feststellen, dass alle internen Felder privat sind. Das Einstellen und Lesen von Werten direkt aus den Feldern eines Objekts wird als schlechte Praxis angesehen. Stattdessen ist es üblich, bekannte Getter und Setter zu verwenden:
public class User { private String login; private String password;
Jetzt haben wir Zugriff auf die Felder und können deren Werte festlegen und lesen. In diesem Beispiel verwenden wir jedoch nur zwei Felder. Und was passiert, wenn es fünfzehn dieser Felder gibt? Die User-Klasse wird dank der endlosen Kopier- und Einfügefunktion von Gettern und Setzern auf beispiellose Größen erweitert. Wie werden wir damit umgehen?
Magischer Lombok
Hier kommt
Project Lombok zum Einsatz - eine beliebte Bibliothek, mit der wir Code mehrmals reduzieren, Probleme beim Kopieren / Einfügen vermeiden und den Zeitaufwand für das Schreiben von Datenobjektklassen erheblich reduzieren können. Einige nützliche Links:
Was macht er Erstellt automatisch Getter und Setter für alle Felder der Klasse, indem ihr die entsprechende Anmerkung zugewiesen wird:
import lombok.Getter; import lombok.Setter;
Einfach, schnell und bequem. Dadurch wird unser Code viel lesbarer, die Klassen sind prägnanter und die Entwicklung ist schneller.
Im Test anwenden
Ein guter Test ist ein Test, bei dem Testdaten, Testlogik und deren Implementierung klar voneinander getrennt sind.Versuchen wir, unseren Benutzer anzumelden. Wir erstellen eine Klasse mit Testdaten und "füllen" sie mit einem neuen Benutzer:
Wir beschreiben das Modell der Anmeldeseite:
public class LoginPage {
Es bleibt nur die Testklasse zu implementieren:
public class LoginTest { @Test public void loginAsDefaultUser() {
Fertig! Du bist großartig!
Zusammenfassend
Im Finale erhalten wir eine übersichtliche Projektarchitektur mit einer klaren Trennung von Logik, Daten und Implementierung. Lombok hilft Ihnen dabei, Code-Duplikationen zu beseitigen, Domain Object passt perfekt zur Page Object-Philosophie und die Code-Unterstützung wird zu einem echten Vergnügen.
Sollte es Minuspunkte geben?- Immunität. Oder besser gesagt, seine Abwesenheit. Dabei verliert dieser Ansatz mit Lombok gegen den Hauptkonkurrenten - Builder ( Artikel über Habré ). Meiner Meinung nach ist der obige Code jedoch „sauberer“, verständlicher und ästhetischer als die endlose Kette im Builder und der Vielzahl von Methoden in der Object-Klasse.
- Erhöhen Sie die Komplexität dort, wo sie nicht benötigt wird. Nicht so sehr Minus als eine kleine Erinnerung. Jeder Ansatz oder jedes Muster ist problematisch und sollte ein bestimmtes Problem lösen. Sie sollten nicht versuchen, das Datenobjekt in einem Komponententest zu verwenden, bei dem nur 2 + 2 = 4 überprüft wird.
Vielen Dank für Ihre Aufmerksamkeit. Ich freue mich über Bewertungen und Kritik.
PS Sagen Sie in den Kommentaren, welche Ansätze Sie in Ihrer Arbeit verwenden. Es wird sehr interessant sein zu lesen.