Domanda

Mi chiedo come stanno eseguendo i test unitari i pochi utenti Delphi qui, se ce ne sono?C'è qualcosa che si integra con l'IDE che hai trovato funziona bene?In caso contrario, quali strumenti stai utilizzando e hai o conosci mini-progetti di esempio che dimostrano come funziona il tutto?

Aggiornamento:

Ho dimenticato di dire che sto usando BDS 2006 Pro, anche se occasionalmente utilizzo Delphi 7 e, naturalmente, altri potrebbero utilizzare altre versioni.

È stato utile?

Soluzione

Unità D è un tipo xUnit di framework di test unitario da utilizzare con win32 Delphi.Da Delphi 2005 DUnit è integrato fino a un certo punto nell'IDE.È possibile trovare altri strumenti di integrazione DUnit per l'IDE Delphi Qui.DUnit viene fornito con documentazione con esempi.

Altri suggerimenti

Ci sono alcuni componenti aggiuntivi per DUnit, forse vale la pena inserire una nuova voce su SO.Due che posso inserire nell'elenco ora sono

  1. VeloceMM4 integrazione:I test unitari rileveranno automaticamente le perdite di memoria (e altre cose), funziona con DUnit 9.3 e versioni successive
  2. OpenCTF è un "framework di test dei componenti" basato su Dunit, crea i test in modo dinamico per tutti i componenti nei moduli, frame e datamoduli del progetto e le verifica utilizzando regole personalizzate (open source)

Potresti dare un'occhiata alle lezioni di test unitario disponibili nel nostro Unità open source SynCommons.Viene utilizzato nel nostro framework Open Source per tutti i test di regressione.Forse non è il massimo, ma vale la pena dargli un'occhiata.

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

Per implementare uno unit test, devi semplicemente dichiarare un nuovo test case creando una classe come questa:

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;

Quindi crei una tuta di prova e la esegui.

Nella versione 1.13 aggiornata, c'è anche un nuovo meccanismo di registrazione con stack trace di qualsiasi eccezione sollevata e simili, proprio come MadExcept, utilizzando il contenuto del file .map come sorgente.

Ora viene utilizzato dalle classi di unit testing, in modo che qualsiasi errore creerà una voce nel log con la riga di origine e l'analisi dello stack:

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) 

La differenza tra un test suit senza registrazione e un test suit con registrazione è solo questa:

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

Il meccanismo di registrazione può fare molto oltre al semplice registro dei test:puoi registrare chiamate ricorsive di metodi, selezionare le informazioni che desideri visualizzare nei log, profilare l'applicazione dal lato cliente, scrivere proprietà pubblicate, contenuto TList o TCollection come JSON nel contenuto del log e così via...

La prima volta che viene letto il file .map, viene creato un file .mab che conterrà tutte le informazioni necessarie sui simboli.Puoi inviare il file .mab con .exe al tuo client o persino incorporarne il contenuto in .exe.Questo file .mab è ottimizzato:una .map di 927.984 byte si comprime in un file .mab da 71.943.

Quindi questa unità potrebbe essere riconosciuta come la figlia naturale del matrimonio DUnit e MadExcept, in puro OpenSource.:)

Ulteriori informazioni sono disponibile sul nostro forum.Sentiti libero di chiedere.Feedback e richieste di funzionalità sono benvenuti!Funziona da Delphi 6 fino a XE.

DUnit2 è disponibile da http://members.optusnet.com.au/~mcnabp/

DUnit2 viene modificato più regolarmente rispetto al dunit originale.Funziona anche su Delphi 2009.

Tentativo: http://sourceforge.net/projects/dunit2/ - si è commosso quando l'autore originale Peter McNab è morto diversi anni fa.Ancora qualche attività sulla mailing list dunit.

È in fase di sviluppo un nuovo framework di unit test per le moderne versioni di Delphi: https://github.com/VSoftTechnologies/DUnitX

Di solito creo un progetto di test unitario (File->Nuovo->Altro->Test unitario->Progetto test).Contiene le cose di cui ho bisogno, quindi finora è stato abbastanza buono.

Uso Delphi 2007 quindi non so se sarà disponibile nel 2006.

Eseguiamo test unitari di tutto il codice logico utilizzando DUnit e utilizziamo il profiler di copertura del codice incluso in AQTime per verificare che tutti i percorsi attraverso il codice vengano eseguiti dai test.

Abbiamo due approcci, in primo luogo abbiamo i test Dunit eseguiti dagli sviluppatori: questi assicurano che il codice appena modificato funzioni ancora come prima.L'altro approccio consiste nell'utilizzare CruiseControl.NET per creare file eseguibili e quindi eseguire i test dunit ogni volta che viene apportata una modifica, per garantire che non vi siano conseguenze indesiderate della modifica.

Gran parte della nostra base di codice non prevede test, quindi i test automatici sono un caso di sviluppo continuo per garantire che le nostre applicazioni funzionino come pensiamo che dovrebbero.

Abbiamo provato a utilizzare DUnit con Delphi 5, ma non ha funzionato bene.Specialmente se stai implementando interfacce COM, abbiamo trovato molte dipendenze per configurare tutta l'infrastruttura di test.Non so se il supporto del test sia migliorato nelle versioni più recenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top