Testy jednostkowe w Delphi-jak to robisz? [zamknięte]

Zastanawiam się, jak kilku użytkowników Delphi tutaj robi testy jednostkowe, jeśli w ogóle? Czy jest coś, co integruje się z IDE, które znalazłeś działa dobrze? Jeśli nie, to jakich narzędzi używasz i czy masz lub znasz przykładowe miniprojekty, które pokazują, jak to wszystko działa?

Aktualizacja:

Zapomniałem wspomnieć, że używam BDS 2006 Pro, choć czasami wpadam do Delphi 7, i oczywiście inni mogą używać innych wersji.

Author: Bruce McGee, 2008-08-20

9 answers

DUnit jest frameworkiem do testowania jednostek typu xUnit używanym Z win32 Delphi. Od Delphi 2005 DUnit jest zintegrowany z punktem certan w IDE. Inne narzędzia do integracji DUnit dla Delphi IDE można znaleźć tutaj . DUnit jest dostarczany z dokumentacją z przykładami.

 39
Author: Lars Truijens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:26:09

Są jakieś dodatki do Dunita, może warto dodać nowy wpis na SO. Dwa, które mogę teraz umieścić na liście to

  1. FastMM4 integracja: testy jednostkowe automatycznie wykrywają wycieki pamięci( i inne rzeczy), współpracuje z DUnit 9.3 i nowszymi
  2. OpenCTF is a " component test framework " w oparciu o DUnit, it tworzy testy dynamicznie dla wszystkie elementy projektu formularze, ramki i moduły danych, oraz testuje je za pomocą customized rules (open source)

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

 18
Author: mjn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-10 17:36:44

DUnit2 jest dostępny od http://members.optusnet.com.au / ~ mcnabp /

DUnit2 jest modyfikowany częściej niż oryginalny dunit. Działa również w Delphi 2009.

Try: http://sourceforge.net/projects/dunit2 / - poruszyło się, gdy pierwotny autor Peter McNab zmarł kilka lat temu. Wciąż jakaś aktywność na liście mailingowej dunit.

 9
Author: Sean Cross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 10:59:07

JEST NOWY framework do testowania jednostek dla nowoczesnych wersji Delphi w rozwoju: https://github.com/VSoftTechnologies/DUnitX

 9
Author: Harriv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-22 09:05:54

Możesz rzucić okiem na klasy testów jednostkowych dostępne w naszej syncommons open source unit . Jest on używany w naszym Open-Source frameworku do wszystkich testów regresyjnych. Może nie jest najlepszy, ale warto się temu przyjrzeć.

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

Aby zaimplementować test jednostkowy, wystarczy zadeklarować nowy przypadek testowy, tworząc klasę taką jak ta:

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;

Następnie tworzysz kombinezon testowy, i uruchom go.

W najnowszej wersji 1.13 pojawił się również nowy mechanizm logowania ze śladem stosu każdego podniesionego wyjątku i tym podobne, podobnie jak MadExcept, za pomocą.Mapuj zawartość pliku jako źródło.

Jest teraz używany przez klasy testów jednostkowych, więc każda awaria utworzy wpis w dzienniku z linią źródłową i trace stosu:

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) 

Różnica między kombinezonem testowym bez logowania a kombinezonem testowym z logowaniem jest tylko taka:

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

Mechanizm logowania można zrobić coś więcej niż tylko zarejestrować testowanie: można rejestrować rekurencyjne wywołania metod, wybrać informacje, które mają się pojawić w dziennikach, profilować aplikację od strony klienta, pisząc opublikowane właściwości, TList lub TCollection zawartość jako JSON do zawartości dziennika, i tak dalej...

Po raz pierwszy .plik mapy jest odczytywany, a .plik mab zostanie utworzony i będzie zawierał wszystkie potrzebne informacje o symbolu. Możesz wysłać .plik mab z ... exe do klienta, a nawet osadzenie jego Zawartości w .exe. To .plik mab jest zoptymalizowany: a .Mapa 927 984 bajtów kompresuje się do 71 943 .plik mab.

Więc ta jednostka może być uznana za naturalne dziecko Dunita i MadExcept wedding, w czystym OpenSource. :)

Dodatkowe informacje są dostępne na naszym forum . Możesz zapytać. Opinie i prośby o funkcje są mile widziane! Działa od Delphi 6 do XE.

 8
Author: Arnaud Bouchez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-13 18:33:39

Zazwyczaj tworzę projekt testu jednostkowego (Plik->Nowy->Inne->test jednostkowy->projekt testowy). Zawiera rzeczy, których potrzebuję, więc do tej pory było wystarczająco dobre.

Używam delphi 2007 więc nie wiem czy jest to dostępne w 2006 roku.

 3
Author: PetriW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 12:53:25

Wykonujemy testy jednostkowe całego kodu logicznego za pomocą DUnit i używamy profilera pokrycia kodu zawartego w AQTime, aby sprawdzić, czy wszystkie ścieżki przez KOD są wykonywane przez testy.

 2
Author: lukeck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 15:11:28

Mamy dwa podejścia, najpierw mamy testy Dunit, które są uruchamiane przez deweloperów - te upewniają się, że kod, który został właśnie zmieniony, nadal działa jak wcześniej. Innym podejściem jest użycie CruiseControl.NET aby zbudować pliki wykonywalne, a następnie uruchomić testy dunit za każdym razem, gdy wprowadzana jest zmiana, aby upewnić się, że nie ma niezamierzonych konsekwencji zmiany.

Duża część naszego kodu nie ma testów, więc testy automatyczne są przykładem ciągłego rozwoju w celu zapewnienia naszego aplikacje działają tak, jak uważamy, że powinny.

 2
Author: mmmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-28 20:23:30

Próbowaliĺ "My uĹźyÄ ‡ Dunita z Delphi 5, ale nie dziaĹ' o to dobrze. Szczególnie jeśli implementujesz interfejsy COM, znaleźliśmy wiele zależności do konfiguracji całej infrastruktury testowej. Nie wiem, czy wsparcie testowe poprawiło się w nowszych wersjach.

 1
Author: Gustavo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-20 18:44:29