Wie Web-Code testen?

stimmen
11

Hat jemand ein paar gute Hinweise für das Schreiben von Testcode für Datenbank-Backend-Entwicklung, wo es eine starke Abhängigkeit vom Zustand ist?

Insbesondere möchte ich für die Code-Tests schreiben, die Datensätze aus der Datenbank abzurufen, aber die Antworten werden in der Datenbank auf den Daten abhängen (was im Laufe der Zeit ändern können).

Menschen in der Regel noch ein separates Entwicklungssystem mit einer ‚eingefroren‘ Datenbank machen, so dass eine bestimmte Funktion immer genau die gleiche Ergebnismenge zurückgeben sollte?

Ich bin mir ziemlich sicher, dass dies kein neues Thema ist, so dass ich sehr interessiert wäre, von den Erfahrungen anderer zu lernen.

Gibt es gute Artikel gibt, die Diskussion um dieses Problem von Web-basierten Entwicklung im Allgemeinen?

Normalerweise schreibe ich PHP-Code, aber ich würde alle diese Fragen zu erwarten sind weitgehend Sprache und Rahmen Agnostiker.

Veröffentlicht am 05/08/2008 um 22:58
quelle vom benutzer
In anderen Sprachen...                            


10 antworten

stimmen
5

Sie sollten in DBUnit aussehen, oder versuchen, ein PHP-äquivalent zu finden (da muss man da draußen). Sie können es verwenden, um die Datenbank mit einem bestimmten Satz von Daten vorzubereiten, die Testdaten darstellt, und so wird jeder Test nicht mehr hängen von der Datenbank und einigem bestehenden Zustand. Auf diese Weise ist jeder Test eigenständig und wird nicht während der weiteren Datenbanknutzung brechen.

Update: Eine schnelle Google - Suche ergab eine DB - Einheit Erweiterung für PHPUnit.

Beantwortet am 05/08/2008 um 23:03
quelle vom benutzer

stimmen
3

Wenn Sie mit Datenschicht Tests meist besorgt sind, sollten Sie dieses Buch überprüfen: xUnit Testmuster: Refactoring Testcode . Ich war immer unsicher , es selbst, aber dieses Buch hat eine große Aufgabe zu helfen , die Sorgen wie Leistung, Reproduzierbarkeit, usw. aufzählen

Beantwortet am 06/08/2008 um 05:14
quelle vom benutzer

stimmen
2

Wir verwenden eine In-Memory - Datenbank (hsql: http://hsqldb.org/ ). Hibernate ( http://www.hibernate.org/ ) macht es uns leicht , unsere Unit - Tests in dem Test db - zu - Punkt, mit dem zusätzlichen Bonus , dass sie wie der Blitz so schnell laufen ..

Beantwortet am 10/09/2008 um 13:02
quelle vom benutzer

stimmen
2

Ich denke, es hängt davon ab, was Datenbank, die Sie verwenden, aber Red Gate (www.red-gate.com) ein Tool machen SQL Data Generator genannt. Dies kann so konfiguriert werden, Ihre Datenbank mit vernünftigen suchen Testdaten zu füllen. Sie können ihm auch immer sagen, das gleiche Saatgut in seinem Zufallszahlengenerator verwenden, um Ihre ‚zufällig‘ Daten gleich sind, jedes Mal.

Anschließend können Sie Ihre Unit-Tests schreiben Verwendung dieser zuverlässigen, reproduzierbaren Daten zu machen.

Wie für die Web - Seite der Dinge zu testen, suche ich zur Zeit in Selenium (selenium.openqa.org). Dies scheint eine Cross-Browser - fähig Testsuite zu sein , die Sie Testfunktionalität helfen. Doch wie bei allen diesen Web - Site Test - Tools, gibt es keine wirkliche Möglichkeit zu testen , wie gut diese Dinge aussehen in allen Browsern , ohne ein menschliches Auge über sie zu werfen!

Beantwortet am 06/08/2008 um 14:44
quelle vom benutzer

stimmen
1

Im Allgemeinen bin ich mit Peter aber für das Erstellen und Löschen von Testdaten würde ich nicht SQL direkt verwenden. Ich ziehe es einig CRUD-API zu verwenden, die in Produkt verwendet wird, um Daten ähnlich wie bei der Produktion wie möglich zu gestalten ...

Beantwortet am 10/09/2008 um 12:31
quelle vom benutzer

stimmen
1

Ich würde vorschlagen, drei Datenbanken zu verwenden. Eine Produktionsdatenbank, eine Entwicklungsdatenbank (gefüllt mit einigen aussagekräftigen Daten für jeden Entwickler) und eine Testdatenbank (mit leeren Tabellen und vielleicht ein paar Zeilen, die immer benötigt werden).

Eine Möglichkeit, Datenbank-Code zu testen:

  1. Legen Sie ein paar Zeilen (unter Verwendung von SQL) Zustand zu initialisieren
  2. Führen Sie die Funktion, die Sie testen wollen
  3. Vergleichen mit den tatsächlichen Ergebnissen zu erwarten. Hier können Sie Ihre normale Unit Testing Framework verwenden
  4. Reinigen Sie die Zeilen nach oben, die geändert wurden (so der nächste Lauf wird nicht den vorherigen Lauf sehen)

Die Bereinigung kann in üblichen Weise durchgeführt werden (natürlich nur in der Testdatenbank) mit DELETE * FROM table.

Beantwortet am 19/08/2008 um 19:40
quelle vom benutzer

stimmen
1

Hier ist meine Strategie (ich benutze JUnit, aber ich bin sicher, es gibt einen Weg, um das Äquivalent in PHP zu tun):

Ich habe eine Methode, die für eine bestimmte DAO Klasse vor allen der Unit-Tests ausgeführt wird. Es setzt die Entwickler-Datenbank in einen bekannten Zustand (fügt alle Testdaten, etc.). Wie ich Tests laufen, verfolge ich irgend dem bekannten Stand addierten Daten. Diese Daten werden am Ende eines jeden Tests gereinigt. Nachdem alle Tests für die Klasse ausgeführt haben, entfernt eine andere Methode, die alle Testdaten in der Entwickler-Datenbank, es in dem Zustand verläßt es in war, bevor die Tests ausgeführt wurden. Es ist ein bisschen Arbeit, all dies zu tun, aber ich schreibe in der Regel die Methoden in einer DBTestCommon Klasse, wo alle meine DAO Testklassen, um sie zu bekommen.

Beantwortet am 11/08/2008 um 14:30
quelle vom benutzer

stimmen
1

Sie könnten versuchen , http://selenium.openqa.org/ es für GUI - Tests ist eher als eine Testanwendung Datenschicht aber Ihre Aktionen nicht aufzeichnen , die dann wiedergegeben werden können Tests über verschiedene Plattformen hinweg zu automatisieren.

Beantwortet am 06/08/2008 um 13:06
quelle vom benutzer

stimmen
1

Wenn Sie mit einer bekannten Menge der Datenbank-Setup vor der Durchführung der Tests und reißen am Ende nach unten, dann wissen Sie, welche Daten Sie arbeiten.

Dann können Sie so etwas wie Selen verwenden einfach von Ihrem UI zu testen (vorausgesetzt, webbasiertes hier, aber es gibt eine Menge von UI-Test-Tool gibt für andere UI-Aromen) und das Vorhandensein bestimmter Datensätze zu erfassen, zurück aus der Datenbank gezogen.

Es ist auf jeden Fall wert entweder eine Testversion der Datenbank einrichten - oder machen Sie Ihre Testskripte, die Datenbank mit bekannten Daten im Rahmen der Tests zu füllen.

Beantwortet am 05/08/2008 um 23:08
quelle vom benutzer

stimmen
1

Ich habe genau die gleiche Problem mit meiner Arbeit und ich finde, dass die beste Idee, einen PHP-Skript haben, ist die Datenbank und dann ein separates Skript neu zu erstellen, wo ich verrückt Daten an ihn werfen, um zu sehen, ob es es bricht.

Ich habe immer jede Unit-Tests oder dergleichen, so kann nicht sagen, ob es funktioniert oder nicht leider nicht genutzt.

Beantwortet am 05/08/2008 um 23:03
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more