Wie man Delphi DUnit-Test machen fehlschlagen, wenn TSQLConnection.Connected = true

StackOverflow https://stackoverflow.com/questions/457363

  •  19-08-2019
  •  | 
  •  

Frage

Wenn Delphi IDE verwendet, wird es still SQLConnection.Connected ändern auf „true“, wenn Feld- oder Tabellenlisten in verschiedenen Eigenschaften bevölkert.

Da will ich nicht mit Connected freigeben = true, ich brauche meinen dunit Test fehlschlägt, wenn TSQLConnection.Connected in DFM wahr gelassen wird.

War es hilfreich?

Lösung

Ich löse dies auf eine andere Weise. Ich schrieb ein kleines Dienstprogramm, das eine DFM-Datei lädt, und suche nach Eigenschaften, die nicht vorhanden sein sollten. Einschließlich der database.connected = true Werte.

Dies kann geändert werden, mit geeigneten Eigenschaften zu arbeiten. Ich habe den Kern des Codes auch hier setzen.

Um dies wirklich nützlich zu machen, sollten Sie dieses Programm in Ihrem Build-Skript verwenden (ich benutze Finalbuilder). Mein Skript beginnt, indem Sie auf .dfm Dateien Looping, eine dieser Eigenschaften Strippen, und dann kompiliert und führt die Unit-Tests. Wenn sie passieren, dann continutes es die Hauptanwendung zu bauen. Für mich ist dies eine bessere Art und Weise einer Einheit Test nicht bestehen, als wenn man, wie man sich von einem garantierten bekannt guten Punkt beginnen kann.

nState := 0;
bFound := False;
for nFileLoop := 0 to memoFile.Lines.Count - 1 do
begin
  szLine := memoFile.Lines[nFileLoop];

  case nState of      //
  0:
     begin
        if(0 <> Pos('TADOConnection', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TADOTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TADOQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMTable', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMDatabase', szLine)) then
        begin
           szSeeking := 'Connected';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMSession', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end
        else if(0 <> Pos('TDBISAMQuery', szLine)) then
        begin
           szSeeking := 'Active';
           nState := 1;
        end;
     end;
  1 :
     begin
        bFound := True;
        if(0 <> Pos('end', szLine)) then
        begin
           nState := 0;
        end
        else if(0 <> Pos(szSeeking, szLine)) then
        begin
           nPos := Pos('=', szLine);
           if nPos > 0 then
           begin
              memoFile.Lines[nFileLoop] := Copy(szLine, 1, nPos) + ' False';
           end;
        end;
     end;
  end;      // case
end;

Andere Tipps

GExperts hat einen „Set Component Properties“ Experten, die wir so konfigurieren, dass Datenbankverbindungen auf jeder Kompilierung zu schließen. Da das zu tun, haben wir das Problem nicht gehabt.

Sie können Ihren eigenen Nachkommen TSQLConnection schreiben, speichert nicht seine Eigenschaft Connected:

  TdzAdoConnection = class(TADOConnection)
  published
    property Connected stored false;
  end;

und diese Komponente verwenden, anstatt TSQLConnection.

(Die oben ist für TADOConnection, aber TSQLConnection sollte auch funktionieren.)

OpenCTF - Component Test Framework für Delphi könnte interessant sein, erstellt es automatisch Unit-Tests für bestimmte Eigenschaften von alle Komponenten in allen Formen / Datamodules. Es ist Open Source und einfach zu bedienen.

"Getting Started" Dokument: http://www.habarisoft.com/download/OpenCTFGettingStarted .pdf

  

Die OpenCTF Komponente Test-Framework   hilft für alle automatischen Tests zu bauen   (Visuelle und nicht-visuelle) VCL-Komponenten   in einer Delphi-Anwendung. Es basiert   auf dem DUnit-Framework.

Einige Anwendungsbeispiele:

  • erkennen oder falsch Eigenschaftswerte fehlen - zum Beispiel Tasten ohne zugeordnete Aktionen, Datasources ohne zugehörigen Datensatz
  • erkennen unassigned Event-Handler - z.B. fehlende OnExecute Ereignis
  • Sie sicher, dass alle Datensätze geöffnet werden kann
  • überprüfen Sie die Tab-Reihenfolge
  • unsichtbare Komponenten findet (zum Beispiel unsichtbarer tabsheets, die besser zur Laufzeit versteckt werden sollen)

OpenCTF http://www.mikejustin.com/images/OpenCTF.gif

Ein weiterer Ansatz für dieses Problem ist es, einen pre-commit Haken in den SCM zu implementieren. Ich benutze TortoiseSVN, und ich habe ähnliche Dinge getan, um die Dinge zu verhindern, schleicht in. Zum Beispiel haben wir eine „Skin“ Bibliothek, die etwa eine Dutzend Haut Einheiten auf jede Form hinzuzufügen versucht, die Sie in der IDE öffnen. (Wir haben einen Registry-Patch bekommen, dass „fixen“ dieses Verhalten, aber es wird „un-done“ jeder einmal in einer Weile, wenn ein Entwickler wieder installiert Komponenten). So habe ich eine „verbotene Strings Liste“ in einer INI-Datei, die in einem SVN Haken vorbestellt begehen.

In unserer Umgebung, die alle Produktionscode wird auf einer dedizierte „Build-Maschine“ gebaut, so dass, wenn Code nicht eingecheckten in erhält, ist es nicht es in die Build machen. Problem gelöst.

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