Frage

Ich Frage mich, wie das paar Delphi-Benutzer hier tun, unit-Tests, wenn überhaupt?Gibt es etwas, das die Integration mit der IDE, dass Sie gefunden haben, die gut funktioniert?Wenn nicht, welche tools Sie verwenden, und Sie haben oder kennen beispielsweise die mini-Projekte, die zeigen, wie das alles funktioniert?

Update:

Ich vergaß zu erwähnen, dass ich mit BDS 2006 Pro, obwohl ich gelegentlich Tropfen in Delphi 7, und natürlich auch andere verwenden möglicherweise andere Versionen.

War es hilfreich?

Lösung

DUnit ist ein xUnit Art von unit-Test-framework verwendet zu werden, die mit win32-Delphi.Seit Delphi 2005 DUnit ist integriert, um eine certan Punkt in der IDE.Andere DUnit integration tools für die Delphi-IDE gefunden werden kann hier.DUnit kommt mit Dokumentation mit Beispielen.

Andere Tipps

Es gibt einige add-ons für DUnit, vielleicht lohnt sich ein neuer Eintrag auf, SO.Zwei, die ich kann, auf die Liste gesetzt jetzt sind

  1. FastMM4 integration:Unit-tests, wird automatisch erkannt, Speicher-Lecks (und andere Dinge), arbeitet mit DUnit 9.3 und neuer
  2. OpenCTF das ist eine " Komponente test Rahmen', basierend auf DUnit, es erstellt die tests dynamisch für alle Komponenten des Projekts Formulare, frames und datenmodulen und testet Sie mit benutzerdefinierten Regeln (open source)

Sie könnten werfen Sie einen Blick auf die unit-Test-Klassen finden Sie in unserer SynCommons open-source-Gerät.Es ist verwendet in unsere Open-Source-framework für alle regression tests.Es ist vielleicht nicht die beste, aber es lohnt sich, einen Blick auf Sie.

Finden http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi

Um eine unit-Tests, die Sie nur erklären, sondern einen neuen Testfall, indem Sie eine Klasse erstellen, wie diese:

type
  TTestNumbersAdding = class(TSynTestCase)
  published
    procedure TestIntegerAdd;
    procedure TestDoubleAdd;
  end;

procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
    i: integer;
begin
  for i := 1 to 1000 do
  begin
    A := Random;
    B := Random;
    CheckSame(A+B,Adding(A,B));
  end;
end;

Dann erstellen Sie eine test-Anzug, und führen Sie es.

In der bis-zu-kommen 1.13-version gibt es auch eine neue logging-Mechanismus mit stack-trace der erhöhten Ausnahme und solche, genau wie MadExcept, mit .anzeigen des Datei-Inhalts, als Quelle.

Es ist nun von der unit-Test-Klassen, so dass jeder Fehler wird ein Eintrag in der log-Datei mit der Zeile, und den stack-trace:

C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25

20110413 05402559 fail  TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163) 

Der Unterschied zwischen test-Anzug ohne Anmeldung und testen Anzug mit Protokollierung ist nur dies:

procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
  inherited;
  with TestCase[fCurrentMethod] do
    fLogFile.Log(sllFail,'%: % "%"',
      [Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;

Die logging-Mechanismus können viel tun, als sich einfach die Prüfung:Sie können sich rekursive Aufrufe von Methoden, wählen Sie die Informationen, die Sie wollen, erscheinen in den Protokollen Profil der Antrag von der Kunden-Seite, schreiben published-Eigenschaften, TList oder TCollection-Inhalt als JSON in die log-Inhalte, und so weiter...

Das erste mal die .Karte Datei ist zu Lesen, ein .mab-Datei erstellt und enthält alle symbol-Informationen benötigt.Sie können senden die .mab-Datei mit dem .exe-Datei, um Ihre Kunden, oder sogar einbetten von Inhalten des .exe.Diese .mab-Datei optimiert ist:ein .Karte von 927,984 bytes komprimiert in einem 71,943 .mab-Datei.

Damit dieses Gerät erkannt werden konnte, als das Natürliche Kind der DUnit-und MadExcept Hochzeit, in reinen Open-Source.:)

Weitere Informationen erhältlich in unserem forum.Fühlen Sie sich frei zu Fragen.Feedback und feature-Anfragen sind willkommen!Werke von Delphi 6 bis XE.

DUnit2 ist verfügbar http://members.optusnet.com.au/~mcnabp/

DUnit2 geändert wird regelmäßig mehr als die ursprüngliche dunit.Es funktioniert auch auf Delphi 2009.

Versuchen: http://sourceforge.net/projects/dunit2/ - es bewegte sich, als der ursprüngliche Autor Peter McNab verstarb vor einigen Jahren.Noch einige Aktivitäten auf dem dunit-mailing-Liste.

Es gibt einen neuen unit-Test-framework für moderne Delphi-Versionen in Entwicklung: https://github.com/VSoftTechnologies/DUnitX

In der Regel erstelle ich einen Unit-test-Projekt (Datei->Neu->Andere->Unit-Test->Test-Projekt).Es enthält die Zeug, die ich brauche, damit es gut genug gewesen, so weit.

Ich benutze delphi 2007, so dass ich don ' T wirklich wissen, wenn diese in 2006.

Wir tun, unit Tests für alle Logik-code mit DUnit und verwenden Sie die code-coverage-profiler enthalten AQTime um zu überprüfen, dass alle Pfade durch den code werden ausgeführt, indem die tests.

Wir haben zwei Ansätze, zuerst haben wir Dunit-tests, die ausgeführt werden, kaufen Sie die Entwickler - diese machen sicher, dass der code, der gerade geändert wurde, arbeitet immer noch als zuvor.Der andere Ansatz ist die Verwendung CruiseControl.NET zum erstellen von ausführbaren Dateien und führen Sie dann die dunit-tests jedesmal, wenn eine änderung vorgenommen wird, um sicherzustellen, dass es keine unbeabsichtigten Konsequenzen der änderung.

Viele unserer Codebasis hat keine tests, so dass die automatische Prüfungen ein Fall von kontinuierliche Entwicklung, um sicherzustellen, dass unsere Anwendungen arbeiten, wie wir denken, Sie sollten.

Wir haben versucht, zu verwenden, DUnit, die mit Delphi 5, aber es hat nicht funktioniert gut.Speziell wenn Sie die COM-Schnittstellen, fanden wir viele Abhängigkeiten zu setup alle die test-Infrastruktur.Ich weiß nicht, ob die test-Unterstützung wurde verbessert, neuere Versionen.

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