Frage

Ich arbeite an einer Testumgebung für ein Projekt, und bin auf der Suche in DbUnit.NET mit viel der Datenbank Interaktion Tests zu tun. Ich haben Sie eine sehr große Frage aber:

Wir laufen gegen Oracle und einen separaten Test DB-Instanz für jeden Entwickler Einrichtung wirklich nicht möglich ist (vor allem, da wir nur 1 DBA haben, die bereits für die Zeit geschnallt wird). Das bedeutet, dass alle Entwickler und aus Continuous Integration Server alle müssen das gleiche DB-Schema verwenden.

Also, auf die Frage: Gibt es eine gute Möglichkeit, mehr als 1 Person von Tests zur gleichen Zeit zu verhindern? Es wäre leicht, einen Datensatz in einem db Tisch zu legen, die angibt, dass ein Test ausgeführt wird, dann entfernen, nachdem Tests abgeschlossen sind, aber NUnit hat keine Möglichkeit, etwas zu Testsitzung Anfang und am Ende ausgeführt werden.

Jede andere Meinung? Es scheint, wie es ein ziemlich häufiges Problem ... sein sollte oder nicht alle tatsächlich getrennte DB-Instanzen für jeden Entwickler / Tester ausführen, die die Tests ausführen könnte?

War es hilfreich?

Lösung

Wir haben eine Dummy-Tabelle mit einem einzelnen Datensatz als Sperre Token, wenn wir Datenbank Tests für eine Reihe von Entwicklern, sich auf eine gemeinsame Datenbank lief. Wir erwarben tatsächlich die Sperre für jeden Testfall individuell, so dass ein Entwickler, der will, einen Testfall läuft nicht für eine anderen Entwickler warten muss, wer die ganze Suite läuft bis zum Ende. Wir haben jeder Test seine eigenen Daten einrichten - Nr. Zwischen Testmethoden tragen über

Wir haben die Datenbank Verriegelungsmechanismus tatsächlich Tests Warteschlange statt andernfalls, wenn jemand anderes bereits ein Test ausgeführt wird. Ich glaube, Oracle Verriegelungs Algorithmus ein wenig anders ist, so dass ich weiß nicht, wie das funktionieren würde.

Der einzige Ort, den wir in Schwierigkeiten gerieten, als ein Entwickler durch einen Test im Debug-Modus zu dem Schritt wollte. Das würde blockieren alle anderen Entwickler, die einen Test laufen wollte, bis er den Debugger freigegeben. Wir schrieben den Namen des aktuellen Benutzers in eine Dummy-Tabelle, und hatte der Verriegelungsmechanismus eine Nachricht drucken, wenn sie für mehr als 30 Sekunden blockiert wurde: „Bob derzeit ein Test läuft und hat in den letzten 5 Minuten gewesen“

Das war in Ordnung, aber es war eine Menge Arbeit zu halten. Wir haben versucht, die Anzahl der Datenbank-Tests klein zu halten, und haben die meisten unserer Tests als reine Komponententests im Speicher.

Andere Tipps

Sie können mit den Tasten [TestFixtureSetUp] Attribut Ihre Flagge zu injizieren, der angibt, dass die Tests als eine Möglichkeit, führen ein „true“ Semaphore zu simulieren.

Etwas, das ich mit einigen Ähnlichkeiten zu diesem in einem Problem haben:

Das Programm hatte eine Konfigurationsvariable, die auf der Vorderseite aller relevanten Elemente hinzugefügt wurde. Jede Station hatte seine eigene Einstellung, richtig dort setzte keine Konflikte wären.

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