2011-01-11 10 views
3

EDIT: Dank der ncie commenters, erhalte ich den Unterschied zwischen Einheit und automatisierten Tests, so umbenannt ich das ThemaWie startet man das automatisierte Testen einer großen Anwendung?

Environement: .net 2.0, SQL Server 2005, Windows Server 2003

ich diesen Artikel lesen :

http://www.codeproject.com/KB/tips/convince.aspx

spricht Dieser Kerl darüber, wie Sie ohne changng alles automatisierte Tests zu einer bestehenden App hinzufügen können.

Und ich muss sagen, dass dieser Artikel wirklich genial ist und mich dazu bringen möchte, es auszuprobieren!

Also unser System ist fast das gleiche: alle Daten sind über Web-Dienste zugänglich, so können wir leicht (mit soapui zum Beispiel) einige automatisierte Tests gegen diese Webdienste durchführen.

ABER: Was ist mit der Datenbank? Um automatisierte Tests durchführen zu können, benötigen wir die korrekten Daten in der Datenbank, die dem automatisierten Test entsprechen.

Zum Beispiel, wenn ich einen automatisierten Test machen möchte, der überprüft, dass die Software einen Fehler erzeugt, wenn der Name des Klienten leer ist, muss ich in meinem db einen Klienten mit einem leeren Namen hinzufügen.

hier ist, wie ich glaube, ich kann es tun:

  • schaffen einen Server mit allem, was es braucht (IIS, SQL Server ...)
  • etwas hinzufügen, damit das Datum dieses Servers nie so ändern ich habe nicht die Zeit, in meinem automatisierten Test ändern
  • in meiner Datenbank hinzufügen, die Datensätze ich brauche meinen automatisierter Test

Problem zu tun: die Datenbank wird ein großes Durcheinander in seinem nach 10 automatisierten Test, und ich werde ne ver wissen, welcher Datensatz für welchen automatisierten Test ist. Die Idee wäre, eine Tabelle "TEST_NAME" zu jedem Tisch hinzuzufügen, aber es ist ein bisschen schmutzig in meinem Kopf.

Also hast du jemals diese Art von Technik ausprobiert? Haben Sie bestimmte Werkzeuge benutzt? Ist meine Art zu denken die Gute? (oder zumindest ein gutes).

Dank

EDIT: Ich habe 2 -1 für diesen Thread, Ich mag gerne wissen, warum so werde ich den gleichen Fehler zweimal nicht.

+2

Sie möchten mehr Komponententests durchführen (verwenden Sie Mocks and Fakes anstelle der realen Datenbank) und weniger Tests auf Systemebene, die häufig unterbrochen werden, da diese Tests stark von der Umgebung und der realen Datenbank mit bestimmten Datensätzen abhängen. Dies wird für Sie eine größere Herausforderung sein, da Sie Ihre Tests nicht vor der Entwicklung geschrieben haben. Das Buch "Michael Feathers", das effektiv mit Legacy-Code funktioniert, kann Ihnen bei Ihrem Szenario helfen. –

+5

@Remi - Sie könnten den 'Komponententest' in 'automatischen Test' ändern. Komponententests sind von externen Ressourcen wie Datenbanken, Dateisystemen und Netzwerken isoliert. –

+0

@Jeff: Hier möchte ich nur meine Business-Schicht (= Web-Service) testen, nicht meine Datenbank, aber ich muss Testdaten in meiner Datenbank hinzufügen, damit es funktioniert. @Chris O: Wie Omar in dem Artikel sagt, hier ist das Ziel, nur Komponententest zu schreiben, unser Code ist nicht bereit zum Spott (und auch die Entwickler), also denke ich, dass wir unsere Datenbank benutzen müssen. –

Antwort

0

Es gibt vielleicht eine bessere Lösung als die, an die ich denke, aber warum nicht eine andere Datenbank für Komponententests verwenden und den gesamten Inhalt für die Vorbereitung eines weiteren Testzyklus löschen.

+0

Das ist worüber ich nachdenke: aber das Problem ist die Verwaltung dieser Datenbank und wie ich feststellen kann, mit welchem ​​Komponententest ein Datensatz verknüpft ist. –

+0

Verschiedene dateibasierte Datensätze für jeden * automatisierten * Test. Ich habe dbUnit in der Vergangenheit. Zerstöre zu Beginn jedes Tests die Welt und baue dann nur den benötigten Datensatz auf. http://www.dbunit.org/bestpractices.html#nocleanup * edit: * "Einheit" in "automatisiert" geändert. Ich persönlich denke nicht, dass Sie "Komponententests" sind, sondern "Funktions-" oder "Integrationstests" (sie müssen auch durchgeführt werden, damit Sie sich nicht schlecht fühlen). –

+0

Tests mit einer anderen Datenbank sind noch Integrationstests. Die Rückzahlung bei Komponententests erfolgt, wenn Ihre Tests ihre Abhängigkeit von der Datenbank unterbrechen. – MatthewMartin

1

Wenn Ihre Komponententests Ihre Persistenzschicht treffen, können Sie tatsächlich etwas mit Integrationstests tun. Was Sie tun sollten, abstrahieren Sie Ihre Datenbank während des Komponententests, so dass Sie nur die Logik und nicht das tatsächliche Persistenzmedium testen. Auf diese Weise können Sie sich auf die Business-Layer-Logik konzentrieren. Dies ist leichter gesagt als getan, da es von der Architektur Ihrer Datenschicht abhängt.

Datenschichten sind oft einfach eine Frage der Push-in und herausziehen lässt, so sagen Sie Ihre Datenschicht in eine Schnittstelle wie ABTRACT kann:

interface IRepository 
{ 
    GetModel(id); 
    SaveModel(model); 
} 

Dann in Ihrem Gerät zu testen Ihre zu können Stummel/verspotten Datenschicht mit dieser Schnittstelle. Auf diese Weise geben Sie dem Stub Ihrer Datenbank an, einen beliebigen Wert zurückzugeben, und Sie können einen Test schreiben, der das erwartete Verhalten in diesem Fall aktiviert.

+0

Ich glaube, ich habe nicht verstanden, worum es beim Komponententest geht (obwohl ich viel darüber gelesen habe, weiß ich, dass ich in einem echten Lebenssache bin). Also habe ich ein bisschen das Thema geändert. Vielen Dank –

0

Wenn Sie Ihre Testdaten vor jedem Batch von Tests generieren können, dann beginnen Ihre Datensätze mit einer ID, die der nächsten durch 100 teilbaren Zahl entspricht. Wenn also der größte Datensatz 350 ist, generieren Sie 400 und testen Sie mit 400 und über. Wenn deine DB wirklich groß wird, lösche alles.

Verwandte Themen