2008-09-24 16 views

Antwort

2

Für mein Team ist es In-Memory auf der Entwicklungsmaschine und die Real-Datenbank auf dem Continuous Integration Server.

7

Im Speicher ist eine ausgezeichnete Wahl für Ihre Einheit -tests, wenn die Daten leicht für Ihre gegebenen Testfälle zu säen und eine ganz besondere Operation getestet wird. Eine echte Datenbank ist besser für Integration Tests, bei denen die Datenvoraussetzungen komplexer sind und es einen Wert hat, dass die Basisdaten nach Abschluss der Tests erhalten bleiben. Die einzigen Dinge, die wir in unserer "schnellen" Testsuite von JUnit-Tests zulassen, sind diejenigen, die keine externen Abhängigkeiten haben (Datenbank, Datei, Netzwerk usw.), so dass die Suite schnell und effizient ausgeführt werden kann von beiden Entwicklern und kontinuierliche Integration beim Check-in. Wenn es einen bestimmten Test gibt, der unbedingt in die DB gehen muss, dann ist eine im Speicher eine der einzige Weg zu gehen.

Ein paar Punkte im Auge zu behalten:

  • sorgfältig Denken Sie, wenn Sie eine Datenbank überhaupt in einem Unit-Test verwenden müssen. Es sein kann, dass die Datenzugriffsschicht ist gekoppelt zu eng an das Geschäft Logik, die Sie versuchen zu testen und kann nicht verspottet werden.
  • Wenn Sie eine echte Datenbank für Integrationstests verwenden, stellen Sie sicher, dass die Tests die Daten immer in einem ursprünglichen Zustand wiederherstellen. Ich habe viel verschwendete Zeit und fehlgeschlagene Integrationstests gesehen, weil einige andere Tests die Daten durcheinander gebracht haben.

Wie für Ihre andere Frage, es hängt wirklich von Ihrer Notwendigkeit ab. Eine gute Faustregel ist eine Entwicklungsdatenbank pro Codezweig, da Schemaänderungen erforderlich sein können, die für einen anderen Codezweig nicht relevant sind. Nur mit eine dedizierte Entwicklungsdatenbank ist wichtig; Ich bin überrascht, wie viele Entwicklungsteams eine Datenbank mit dem QA-Team usw. teilen müssen. Es ist wichtig, Änderungen in einer Umgebung mit eingeschränkten Berechtigungen vornehmen zu können, die andere Teams nicht beeinträchtigt oder andere daran hindert, ihre Arbeit zu erledigen Du hast diese Anforderungen erfüllt, die du gut machst.