Bei dem Vergleich der erwarteten Testdaten mit dem aktuellen Datenbankinhalt stellt checkerberry db fest, welche Tabellenzeilen hinzugefügt, gelöscht oder geändert wurden. Zu diesem Zweck stellt checkerberry db eine eindeutige Zuordnung zwischen den Tabellenzeilen in der Datenbank und den Zeilen der Testdaten her. Die Zuordnung erfolgt über ausgewählte Spalten, die in checkerberry db als Lookup-Keys bezeichnet werden. Die Lookup-Keys werden für jede Datenbanktabelle definiert.
Lookup-Keys sind konzeptionell identisch mit Primary Keys. In beiden Fällen ist das Ziel die Identifikation von Datensätzen. Da die Lookup-Keys einer Tabelle von ihren Primary Keys abweichen können, wurde der neue Begriff Lookup-Keys für eine bessere Unterscheidbarkeit in checkerberry db eingeführt.
Im Gegensatz zu den Primary Keys definieren die Lookup-Keys in der Regel fachliche Schlüssel, da diese in den Testdaten intuitiver zu verwenden sind. Die Verwendung von fachlichen Schlüsseln hat den weiteren Vorteil, dass die Werte bereits zum Zeitpunkt der Testerstellung bekannt sind. Primary Keys werden hingegen häufig in der Datenbank generiert, sodass deren Werte zum Zeitpunkt der Testdatenerstellung noch nicht feststehen.
Lookup-Keys werden durch eine Liste von Spaltennamen definiert. Eine Tabellenzeile wird einer Zeile aus den Testdaten zugeordnet, wenn die Werte der Lookup-Keys dieser beiden Zeilen übereinstimmen. Die Lookup-Keys müssen somit jede Zeile der Testdaten und der zugehörigen Tabelle eindeutig identifizieren.
Abbildung 2.8, „Lookup-Keys“ stellt eine Zuordnung von
Datenbankinhalt und Testdaten anhand von Lookup-Keys dar. Die Datenbank
enthält zwei Einträge in der Tabelle USERS
. Als
Lookup-Key werden die Spalten NAME
und
SURNAME
verwendet. In den Testdaten sind
ebenfalls zwei Datensätze für die Tabelle USERS
definiert. Über die Werte der Lookup-Keys kann eine eindeutige Zuordnung
zwischen den Daten in der Datenbank und den Testdaten hergestellt
werden.
Die Lookup-Keys können innerhalb einer Test-Methode einfach geändert werden, wie das folgende Code-Beispiel zeigt.
Beispiel 2.8. Anpassen der Lookup-Keys
public void testGetUser() throws Exception { … // Holen des Testhandlers. DbTestHandler testHandler = getEnvironment().getTestHandler(); // Allgemeine Datenbankbeschreibung holen. DatabaseDescription dbDescription = testHandler.getDatabaseDescription(); // Tabellenbeschreibung für Tabelle USERS holen. DatabaseTableDescription tableDescription = dbDescription.getTableDescription("USERS"); // Lookup-Keys ändern: Neuer Lookup-Key ist die Spalte SURNAME. tableDescription.setLookupKeyColumns("SURNAME"); … }
Über die checkerberry db-Umgebung ist der Zugriff auf die
Datenbank- und Tabellenbeschreibungen möglich. In dem Beispiel wird der
Lookup-Key für die Tabelle USERS
auf die Spalte
SURNAME
gesetzt. In den anschließenden
Vergleichen verwendet checkerberry db diesen neuen Lookup-Key. Da jeder
Test eine eigene Kopie der Datenbankbeschreibung verwendet, hat diese
Umstellung keine Auswirkungen auf nachfolgende Testfälle.
Die Anpassung im obigen Beispiel wirkt auf den ersten Blick
fehlerhaft, da sie voraussetzt, dass die Nachnamen in der Tabelle
USERS
eindeutig sind. Es muss dabei allerdings
berücksichtigt werden, dass die Eindeutigkeit lediglich für den
aktuellen Test erforderlich ist. Die Eindeutigkeit ist somit auf die
Testdaten des entsprechenden Tests beschränkt. Dieser Sachverhalt ist
sehr hilfreich, da für spezielle Tests die Lookup-Keys individuell
angepasst werden können.