Frage

Ich habe gehört, dass, wenn die Anwendung zu entwickeln, die eine Datenbank verwendet, sollten Sie Datenbank Unit-Tests tun. Was sind die besten Praktiken in der Datenbank Unit-Tests? Was sind die wichtigsten Anliegen, wenn db Unit-Tests tun und wie es „richtig“ zu tun?

War es hilfreich?

Lösung

Was sind die besten Praktiken in der Datenbank Unit-Tests?

Die DbUnit Rahmen (ein Rahmen-Tests ermöglichen eine Datenbank in einem Know-Zustand zu versetzen und Behauptung auszuführen gegen dessen Inhalt) eine Seite mit einer Liste Datenbank testen best Practices, dass , meiner Erfahrung, sind wahr.

Was sind die wichtigsten Anliegen, wenn db Unit-Tests

tun
  • ein aktuelles Schema anlegen, Schema Verwaltung ändert
  • Einrichten von Daten (Referenzdaten, Testdaten) und beibehalten Testdaten
  • Keeping prüft unabhängig
  • ermöglicht es Entwicklern zu arbeiten gleichzeitig
  • Geschwindigkeit (Tests Datenbank beteiligt sind in der Regel langsamer und werden Ihre ganze Build mehr Zeit nehmen)

und wie es zu tun "richtig"?

Wie angedeutet, folgen bekannte gute Praktiken und dedizierte Tools / Frameworks verwenden:

  • Bevorzugen In-Memory-Datenbank, wenn möglich (für Geschwindigkeit)
  • Verwenden Sie ein Schema pro Entwickler ist ein Muss (damit zusammenhängende Arbeiten zu ermöglichen)
  • Verwenden Sie ein "Datenbankmigration" -Tool (à la RoR) Schemaänderungen zu verwalten und ein Schema auf die ultimative Version aktualisieren
  • Erstellen oder eine Testumgebung verwenden, so dass vor jedem Test die Datenbank in einem bekannten Zustand versetzen und nach der Ausführung behauptet gegen die Daten auszuführen (oder Tests innerhalb einer Transaktion ausgeführt wird, dass Sie am Ende des Tests Rollback).

Andere Tipps

Eine Liste der Gegenstände, die überprüft werden sollen und in Betracht gezogen, wenn sie mit Datenbank Unit-Tests starren

  • Jeder Tester benötigt eine separate Datenbank, um mit Aktivitäten anderer Tester / Entwickler nicht zu stören
  • zu haben, eine einfache Möglichkeit, eine Datenbank zu schaffen, geprüft werden (dies eine SQL-Server-Datenbank unter Versionskontrolle mit verwandt ist). Dies ist besonders nützlich, wenn sie versuchen zu finden, was schief gelaufen ist, wenn einige Tests fehlschlagen
  • Fokus auf bestimmte Bereiche und Erstellung von Tests für ein einzelnes Modul statt alle auf einmal abdeckt. Hinzufügen von Tests granular eine gute Möglichkeit ist, effizient zu sein
  • Stellen Sie sicher, so viele Informationen wie möglich zur Verfügung zu stellen, wenn ein Test fehlschlägt, einfache Fehlersuche zu ermöglichen
  • Verwenden Sie ein und demselben Testdaten für alle Tests

Wenn der Test implementiert sind tSQLt Rahmen, wobei die Einheit Testprozess kompliziert sein könnte, wenn sie mit vielen Datenbanken von mehreren SQL Server-Instanzen zu tun. Um zu halten, führen und Unit-Tests direkt von SQL Server Management Studio, ApexSQL Unit Test kann verwalten als Lösung verwendet werden

Hier finden Sie aktuelle diesen Link . Es geht über einige der Grundlagen für die Erstellung Einheit Testen gespeichert Procs in SQL Server sowie die verschiedenen Arten von Unit-Tests und wann Sie sie verwenden. Ich bin nicht sicher, was verwendeten DBMS aber offensichtlich ist dieser Artikel richtet sich an SQL Server.

Stolen aus dem Artikel:

Feature-Tests

Die erste und wahrscheinlich am häufigsten Klasse der Datenbank Unit-Test ist ein Feature-Test. In meinem Kopf Feature TESTS Kerneigenschaften-oder APIs, wenn man so will-die Datenbank von der Datenbank Verbrauchersicht. Testen einer Programmierbarkeit Datenbank Objekte sind die Hauptstrecke Szenario hier. So testet alle gespeicherten Prozeduren, Funktionen und Trigger in Ihrem Datenbank-Funktion Tests bilden in mein Verstand. Um zu testen, um eine gespeicherte Prozedur, Sie würde die gespeicherte Prozedur ausführen und stellen Sie sicher, dass entweder die erwartete Ergebnisse wurden zurückgegeben oder die angemessenes Verhalten aufgetreten ist. Sie können jedoch mehr als nur testen diese Arten von Objekten. Sie können imagine wollen, dass eine Sicht zu gewährleisten, die entsprechenden zum Beispiel Rück Berechnung von einer berechneten Spalte. Wie Sie können, die Möglichkeiten in dieser sehen Reich ist groß.

Schema-Tests

Einer der wichtigsten Aspekte eines Datenbank ist das Schema, und Testen auf sicherzustellen, dass es wie erwartet verhält eine weitere wichtige Klasse von Datenbank Unit-Tests. Hier finden Sie oft wollen um sicherzustellen, dass eine Ansicht, kehrt die erwartet eine Gruppe von Spalten von der entsprechender Datentyp in der entsprechende Reihenfolge. Sie möchten vielleicht sicherzustellen, dass Ihre Datenbank der Fall ist, in Tatsächlich enthalten die 1.000 Tabellen dass erwarten Sie.

Sicherheit Tests

In der heutigen Tag und Alter, die Sicherheit der Daten, die innerhalb der gespeicherten ist Datenbank ist von entscheidender Bedeutung. So ein anderer wichtige Klasse von Datenbank Unit-Tests die Datenbank sind diejenigen, die Test Sicherheit. Hier werden Sie wollen sicherzustellen, dass bestimmte Benutzer existieren in Ihre Datenbank, und dass sie die entsprechenden Berechtigungen zugewiesen. Sie wollen oft negativ erstellen Tests, die Daten abzurufen versuchen von eingeschränkten Tabellen oder Ansichten und sicherzustellen, dass der Zugriff entsprechend verweigert.

Stock-Daten Tests

Viele Datenbanken enthalten Bestandsdaten oder Seed-Daten. Diese Daten ändern selten und wird häufig verwendet, wie Nachschlag Daten für Anwendungen oder Ende Benutzer. Postleitzahlen und ihre zugehörigen Städte und Staaten sind großartige Beispiele diese Art von Daten. Daher ist es nützliche Tests zu erstellen, um sicherzustellen, Ihre Bestandsdaten der Fall ist, in der Tat existieren in Ihrer Datenbank.

Ich bin froh, dass Sie über Unit Testing gefragt, und in der Regel nicht testen.

Datenbanken haben viele Features, die getestet werden müssen. Einige Beispiele:

  • Datentypen / Größe / Zeichensätze (versuchen, einen schwedischen Namen einfügen, oder lange URLs oder Zahlen aus der realen Welt, und sehen, ob Ihre Spaltendefinitionen sind ok)
  • Trigger
  • Contraints (Fremdschlüssel, Einzigartigkeit ...)
  • Views (diese Daten überprüfen korrekt enthalten / ausgeschlossen / umgewandelt)
  • Stored Procedures
  • UDF
  • Berechtigungen
  • ...

Dies ist nicht nur nützlich, wenn Sie etwas in Ihrer Datenbank ändern, sondern auch, wenn Sie Ihre dbms aktualisieren, ändern oder etwas in Ihren Einstellungen.

Im Allgemeinen wird Integrationstest durchgeführt. Dies bedeutet, dass eine Test-Suite in einer Programmiersprache wie PHP oder Java erstellt wird, und die Tests Ausgabe einige Abfragen. Aber wenn etwas ausfällt, oder es gibt einige Ausnahmen, es ist schwieriger, das Problem zu verstehen, aus 2 Gründen:

  • Das Problem in der PHP-Code oder in der PHP-Konfiguration sein könnte, oder im Netzwerk, oder ...
  • Die SQL-Anweisungen sind schwerer zu lesen und ändern, wenn sie in einer anderen Programmiersprache eingebettet sind.

Also, meiner Meinung nach, für komplexe Datenbanken benötigen Sie ein Unit Testing Framework verwenden, die in SQL geschrieben ist (gespeicherte Prozeduren und Tabellen). Man muss es sorgfältig wählen, weil diese Art von Werkzeugen ist nicht weit verbreitet (und damit nicht weit getestet). Zum Beispiel, wenn Sie MySQL verwenden, weiß, dass ich diese Tools:

Ich benutze JUnit / nunit / etc und Code-up Datenbank Unit-Tests mit Java oder C #. Diese können dann laufen auf einem Integrationsserver vielleicht ein separates Schema der Testdatenbank verwendet wird.

Der neueste SQL Developer kommt mit einem in Unit-Test-Framework aufgebaut. Ich hatte einen Blick in diese würde aber nicht verwenden Sie es. Es verwendet eine GUI zu Erstellen und Ausführen von Tests und speichert alle Tests in der Datenbank so nicht so leicht, Testfälle unter Versionskontrolle zu stellen. Es gibt wahrscheinlich auch andere Test-Frameworks da draußen Ich kann mir vorstellen könnten sie speziell auf Ihre Datenbank sein.

sind gute Praktiken ähnlich wie regelmäßige Unit-Tests:

  • setzen die Tests unter Quellcodeverwaltung
  • Make-Tests, die schnell laufen - nicht Test zu viel auf einmal
  • machen Ihre Tests reproduzierbar

Werfen Sie einen Blick auf DBTestDriven Rahmen. Es funktioniert großartig für uns. Laden Sie es von GitHub oder ihrer Website.

Wie für JVM Entwicklung, Unit-Tests von JDBC Abstraktion profitieren können. Sobald Sie wissen, welche JDBC-Daten von DB-Zugriff erhöht werden, können diese JDBC-Daten sein ‚abgespielt‘

So Zugriff Fall DB kann zum Testen sein ‚reproduziert‘, ohne dass das Ziels DB:. Ohne Test / Datenisolierung Komplexität, erleichtert die kontinuierliche Integration

Mein Rahmen Acolyte ist ein hilfreich Rahmen auf diese Weise (einschließlich Studio GUI-Tool 'record' DB Ergebnis): https://github.com/cchantep/acolyte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top