Hallo zusammen
Vorwort:
Wir wollen uns verbessern. Verbessern insofern, dass wir eine anständige Testinfrastuktur für die Entwickler bereitstellen können. Dazu wollen wir ein einheitliches Vorgehen definieren, wie wir Testdatenbanken für Unit- und Regressionstests automatisiert aufsetzen und die entsprechenden Tests durchführen. Unter Unittests verstehen wir die JUnit-Tests, welcher der Entwickler implementiert. Unter Regressionstests verstehen wir, dass bei einem Check-In, diese JUnit-Tests durchgeführt werden, Stichwort Continious Integration.
Folgende Fragen habe ich:
1. Datenbank für Tests: Wie erstellen?
Unabhängig vom DBMS sehe ich hier als einfachste Lösung, dass wir die Struktur des Entwicklungsschema (oder -datenbank, je nachdem ob ORA oder MSSQL, wir haben beides) kopieren, inkl. Trigger, Sequences, etc, exkl. Daten. Dazu würden wir vermutlich die entsprechenden Tools des DBMS' verwenden.
Hier sehe ich das Problem, dass während Entwicklung und Änderungen am Schema die Regressionstests nicht durchlaufen können.
Ich sehe hier sonst keine einfache Möglichkeit, die Datenbank zur Verfügung zu stellen. Habt ihr noch Ideen? Was haltet ihr von diesem Vorgehen?
2. Testdaten: Wie füllen? (setup/teardown)
Mir fallen da zwei Möglichkeiten ein, welche ich selber schon mal im gleichen Zusammenhang verwendet habe:
2.1. SQL-Statements selber schreiben
Ziemlich simpel: setup.sql und teardown.sql. Händisch im JUnit-Test einlesen und ausführen.
2.2. Programmatisch mit Hibernate
Als Code-Beispiel
Was haltet ihr von den beiden Vorgehensweisen? Fallen euch noch andere ein?
Mir persönlich hat die erstere Variante am besten zugesagt, weil es sehr einfach und schlank ist.
Was mir aber an beiden Varianten nicht gefällt, dass es nicht leserlich ist. Wenn spalten hinzugefügt werden, wenn man Werte vergleichen (assert) muss oder wenn man neue Datensätze aufnehmen muss, macht das nicht sonderlich Spass (und Arbeiten soll ja Spass machen
. Aber ich habe irgendwie das Gefühl, dass es keine einfachere und bessere Variante gibt.
Habt ihr sonst noch Tipps zu bestimmten Vorgehen oder kennt ihr Tools zur Unterstützung?
Besten Dank fürs Lesen =)
Gruss
slowy
Vorwort:
Wir wollen uns verbessern. Verbessern insofern, dass wir eine anständige Testinfrastuktur für die Entwickler bereitstellen können. Dazu wollen wir ein einheitliches Vorgehen definieren, wie wir Testdatenbanken für Unit- und Regressionstests automatisiert aufsetzen und die entsprechenden Tests durchführen. Unter Unittests verstehen wir die JUnit-Tests, welcher der Entwickler implementiert. Unter Regressionstests verstehen wir, dass bei einem Check-In, diese JUnit-Tests durchgeführt werden, Stichwort Continious Integration.
Folgende Fragen habe ich:
1. Datenbank für Tests: Wie erstellen?
Unabhängig vom DBMS sehe ich hier als einfachste Lösung, dass wir die Struktur des Entwicklungsschema (oder -datenbank, je nachdem ob ORA oder MSSQL, wir haben beides) kopieren, inkl. Trigger, Sequences, etc, exkl. Daten. Dazu würden wir vermutlich die entsprechenden Tools des DBMS' verwenden.
Hier sehe ich das Problem, dass während Entwicklung und Änderungen am Schema die Regressionstests nicht durchlaufen können.
Ich sehe hier sonst keine einfache Möglichkeit, die Datenbank zur Verfügung zu stellen. Habt ihr noch Ideen? Was haltet ihr von diesem Vorgehen?
2. Testdaten: Wie füllen? (setup/teardown)
Mir fallen da zwei Möglichkeiten ein, welche ich selber schon mal im gleichen Zusammenhang verwendet habe:
2.1. SQL-Statements selber schreiben
Ziemlich simpel: setup.sql und teardown.sql. Händisch im JUnit-Test einlesen und ausführen.
2.2. Programmatisch mit Hibernate
Als Code-Beispiel
Code:
class Test{
private Entity entity;
void setup(){
entity.setId(1l);
save(entity)
}
void teardown(){
delete(entity)
}
}
Was haltet ihr von den beiden Vorgehensweisen? Fallen euch noch andere ein?
Mir persönlich hat die erstere Variante am besten zugesagt, weil es sehr einfach und schlank ist.
Was mir aber an beiden Varianten nicht gefällt, dass es nicht leserlich ist. Wenn spalten hinzugefügt werden, wenn man Werte vergleichen (assert) muss oder wenn man neue Datensätze aufnehmen muss, macht das nicht sonderlich Spass (und Arbeiten soll ja Spass machen

Habt ihr sonst noch Tipps zu bestimmten Vorgehen oder kennt ihr Tools zur Unterstützung?
Besten Dank fürs Lesen =)
Gruss
slowy