Sign in Join
Wiki copytemporary

FPTest/pl: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11FPTest (Free Pascal Testing Framework) to framework do testów jednostkowych. Jest to rozwidlenie projektu DUnit2 stworzonego przez zmarłego Petera McNaba, ale poprawione specjalnie do użytku z kompilatorem Free Pascal.
22
33Wiele z poniższych pozycji odnosi się do oryginalnego projektu DUnit2 (a teraz projektu FPTest) i tego, jak różni się on od projektu Delphi DUnit. Przedstawiono również informacje o migracji z [[fpcunit]].
44
55## Właściwości
66
77Cele projektowe stosowane podczas opracowywania projektu, niekoniecznie w określonej kolejności:
88
99- Wprowadzenie do SetUpOnce i TearDownOnce dla TestCase i TestSuite.
1010- Poprawienie szybkość wykonywania testu.
1111- Wprowadzenie do wielu "projektów" i otwórzenie drogi do uruchamiania testów projektów w osobnych wątkach.
1212- Poprawienie łatwości korzystania z FPTest (częściowo poprzez dodanie więcej przykładowej dokumentacji).
1313- Upewnienie się, że TTestCase *Constructors* i *Destructors* wykonują się tylko raz, a nie dla każdej zawartej metody testowej.
1414- Zapewnienie nieglobalnych środków do udostępniania danych konfiguracji wysokiego poziomu między jednostkami testowymi.
1515- Bardziej dokładne wyniki testów i ulepszone informacje zwrotne.
1616- Zapewnienie wizualnej liczby wykrytych wycieków pamięci i testów bez funkcji Check().
1717- Zapewnia opcjonalną liczbę określającą, które wywołania funkcji Check() zakończyły się niepowodzeniem.
1818- Czyszczenie kodu poprzez usunięcie starszego kodu w FPTest, takiego jak Delphi Win32 i specyficzny kod .Net.
1919- Text Test Runner dla tych, którzy lubią konsole lub dla nienadzorowanych pakietów testów działających na serwerach.
2020- Nowy GUI Test Runner do [[fpGUI]] lub projektów opartych na LCL.
2121- Znacznie bardziej zaawansowany Test Decorator, który faktycznie działa (FPCUnit jest całkowicie zepsuty).
2222- Zarejestrowane testy można teraz organizować znacznie lepiej, budując hierarchię testów, ułatwiając zarządzanie (włączanie, wyłączanie, pomijanie testów itp.).
2323
2424## Aktualny stan
2525
2626- Nowy kod pozostaje zgodny z istniejącymi zestawami testów, które nie polegają na kodzie DUnit zmodyfikowanym przez użytkownika.
2727- Jeśli projekty testowe FPCUnit używają metod CheckXXX(), a nie metod AssertXXX(), przejście z FPCUnit do frameworka testowego FPTest powinno być dość bezbolesne.
2828- Nowy kod pozostaje kompatybilny z istniejącymi zestawami testów, które nie polegają na funkcjach TestFramework niskiego poziomu (np.TTestResult).
2929- Nowy kod wprowadza klasę Project i ProjectManager między GUI a TextTestRunners, aby pomóc w przyszłym wprowadzeniu wątkowych testów jednostkowych.
3030- Kod SetupOnce i TeardownOnce redukuje bałagan w węzłach i nazwach, w których wcześniej wymagane były dekoratory testów. *Dekorator testów w FPCUnit ma te same wady projektowe i nie działa zgodnie z oczekiwaniami.*
3131- Nowy kod dekoracji testów jest łatwiejszy do zrozumienia i rozszerzenia.
3232- Głębokość wywołań wykonania na procedurę TestCase została zmniejszona w celu poprawy wydajności testowania. (Ścieżka wykonania jest łatwiejsza do naśladowania, co ułatwia przyszłą zmianę kodu).
3333- Indywidualny czas procedury testowej jest teraz brany pod uwagę tylko dla metody testowej i nie obejmuje czasów SetUp i TearDown. Celem jest zapewnienie wyższej dokładności czasowej dla profilowania metod. Ogólny czas nadal obejmuje cały kod w nawiasach.
3434- Obsługiwane są wszystkie istniejące procedury sprawdzania. Dodano kilka nowych procedur sprawdzania, aby uzupełnić dostępny zakres.
3535- Utworzono nowe testy jednostkowe, aby zweryfikować, czy wszystkie procedury Check () wykrywają warunki powodzenia i niepowodzenia.
3636- Wszystkie testy przebiegają bez wycieków pamięci lub konieczności zezwalania na wycieki.
3737- Nowe testy jednostkowe autotestu są bardziej kompleksowe i obejmują sprawdzenie, czy warunki konfiguracji są prawidłowo spełnione przed wykonaniem wymaganych testów.
3838- Klasa Project obsługuje teraz rejestrację i wykonywanie zgrupowanych TestCases (TestSuites) i TestCases.
3939- Zliczanie testów można teraz wywoływać wewnątrz zagnieżdżonych dekoratorów testów, aby zapewnić 2 lub więcej danych wymiarowych.
4040- Niezoptymalizowane puste testy nadal kończą się niepowodzeniem.
4141- Testy, które nie wywołują funkcji Check(), mogą zostać uzbrojone globalnie, aby zakończyć się niepowodzeniem, tj. Z poziomu interfejsu GUI.
4242- Podobnie testy powodujące wycieki pamięci mogą opcjonalnie zostać uzbrojone globalnie, aby zakończyć się niepowodzeniem.
4343- Poszczególne testy mogą opcjonalnie zastąpić powyższe ustawienia GUI. (np. w przypadku znanego wycieku z komponentu strony trzeciej)
4444- Wszystkie testy, które zastępują ustawienia GUI, można opcjonalnie zidentyfikować po wykonaniu testu za pomocą dodatkowych kolorów węzłów.
4545- Liczba zastąpionych niepowodzeń testów jest uwzględniana na ekranie statusu wykonania.
4646- Przesłonięte testy (overridden), które w innym przypadku zakończyłyby się niepowodzeniem, generują osobną liczbę ostrzeżeń widoczną w zaktualizowanym interfejsie GUI i wynikach tekstowych.
4747- Nazwy metod testowych są oddzielone od procesu wykonywania, umożliwiając wyświetlanie informacji po kompilacji na poziomie GUI.
4848- Dodano generator raportów XML, uzupełniający zarówno GUITestRunner, jak i TextTestRunner.
4949- Dodano możliwość w GUITestRunner i TextTestRunner, aby pomijać (wykluczać) poszczególne testy niezależnie od włączonych/wyłączonych testów.
5050- Przyciski narzędzi do GUITestRunner ułatwiające sterowanie i pokazujące w czasie wykonywania, które opcje programowe zostały wybrane.
5151
5252Aby ułatwić wczesne testowanie bez całkowitego ponownego opracowywania GUITestsRunner i TextTestRunner, pośredni moduł Proxy i zamiennik TTestResults zostały wstawione między GUI a nową TestFramework. Chociaż pierwotnym celem było całkowite przeprojektowanie GUI, klasy „Proxy” działają bardzo dobrze i mogą nie wymagać dalszej pracy.
5353
5454## Pobieranie kodu źródłowego
5555
5656Kod źródłowy jest bezpłatnie dostępny z GitHub za pomocą następującego polecenia:
5757
5858``` bash
5959git clone git://github.com/graemeg/fptest.git
6060```
6161
6262lub
6363
6464``` bash
6565git clone https://github.com/graemeg/fptest.git
6666```
6767
6868Jeśli nie masz zainstalowanego [Git](http://git-scm.com/), zawsze możesz pobrać paczkę z kodem źródłowym (archiwum), używając następującego adresu URL.
6969
70-[`https://github.com/graemeg/fptest/tarball/master`](https://github.com/graemeg/fptest/tarball/master)
70+```text
71+https://github.com/graemeg/fptest/tarball/master
72+```
7173
7274Projekt FPTest jest w trakcie aktywnego rozwoju, więc kod i dokumentacja są stale ulepszane. Z tego powodu bardzo polecam pobieranie kodu źródłowego przez git, a nie jako archiwum.
7375
7476## Dokumentacja
7577
7678Dokumentację FPTest można znaleźć w katalogu *docs* jako pliki HTML.
7779
7880## Przykład użycia Test
7981
8082To jest przykładowy projekt testowania w konsoli
8183
8284``` pascal
8385program project1;
8486
8587{$mode objfpc}{$H+}
8688
8789uses
8890 Classes,
8991 TextTestRunner,
9092 sample_tests;
9193
9294begin
9395 // Rejestrowanie wszystkich testów
9496 sample_tests.RegisterTests;
9597
9698 RunRegisteredTests;
9799end.
98100```
99101
100102oraz moduł zawierający rzeczywiste testy...
101103
102104``` pascal
103105unit sample_tests;
104106
105107{$mode objfpc}{$H+}
106108
107109interface
108110
109111uses
110112 TestFramework; // wymagane dla odwołania się do TTestCase i CheckXXX()
111113
112114type
113115 TTestCaseFirst = class(TTestCase)
114116 published
115117 procedure TestWarning;
116118 procedure TestOne;
117119 procedure TestNoError;
118120 procedure TestThree;
119121 procedure TestFour;
120122 end;
121123
122124procedure RegisterTests;
123125
124126implementation
125127
126128uses
127129 SysUtils;
128130
129131{ Tutaj rejestrujemy wszystkie nasze klasy testowe }
130132procedure RegisterTests;
131133begin
132134 TestFramework.RegisterTest(TTestCaseFirst.Suite);
133135end;
134136
135137{ TTestCaseFirst }
136138
137139procedure TTestCaseFirst.TestWarning;
138140begin
139141 // Nic tu nie rób - powinno wywołać ostrzeżenie
140142end;
141143
142144procedure TTestCaseFirst.TestOne;
143145begin
144146 Check(1 + 1 = 3, 'Katastrofalna porażka arytmetyczna!');
145147end;
146148
147149procedure TTestCaseFirst.TestNoError;
148150begin
149151 Check(1 + 1 = 2, 'Katastrofalna porażka arytmetyczna!');
150152end;
151153
152154procedure TTestCaseFirst.TestThree;
153155var
154156 s: string;
155157begin
156158 s := 'cześć';
157159 CheckEquals('Cześć', s, 'Niepowodzenie CheckEquals');
158160end;
159161
160162procedure TTestCaseFirst.TestFour;
161163var
162164 x, y: integer;
163165begin
164166 x := 10;
165167 y := 0;
166168 Check(x / y = 0, 'Niepowodzenie dla 1');
167169end;
168170
169171end.
170172```
171173
172174## Zrzuty ekranu
173175
174176Oto zrzut ekranu z wyjściem narzędzia Text Test Runner.
175177
176178![](/wiki-images/8/80/Fptest_console.png)
177179
178180To jest zrzut ekranu z GUI Test Runner (przy użyciu fpGUI Toolkit) do uruchomienia zestawu testów tiOPF.
179181
180182![](/wiki-images/0/0a/Fptest_fpgui.png)
181183
182184## Jak wypada to w porównaniu do FPCUnit?
183185
184186Ja (Graeme Geldenhuys) przez długi czas byłem użytkownikiem FPCUnit. Współtworzyłem i pomogłem rozszerzyć projekt FPCUnit. Ale FPCUnit ma pewne wady projektowe, co sprawia, że ​​jest przydatny głównie w mniejszych projektach i mniej skomplikowanych zestawach testowych. Dekoratory testów FPCUnit, jak Setup/Teardown itp. są poważnie uszkodzone. Framework testowy FPTest rozwiązuje wszystkie te problemy, dodaje o wiele więcej funkcji, jest łatwiejszy w zarządzaniu testami i wykonuje je szybciej niż równoważne projekty FPCUnit lub DUnit.
185187
186188Dobra wiadomość jest taka, że ​​nie jesteś zmuszony wybierać między żadnym z frameworków testowych. Lata temu dołączyłem interfejs zgodności DUnit/FPTest do FPCUnit. Daje to łatwiejszą drogę do przejścia z FPCUnit do FPTest. Jeśli więc projektujesz swoje zestawy testów przy użyciu wywołań CheckXXX() (zamiast wywołań AssertXXX()), możesz później łatwiej przełączyć się na framework FPTest bez konieczności zmiany kodu testowego.
187189
188190## Zobacz także
189191
190192- [[fpcunit/pl|fpcunit]] Struktura testów jednostkowych dostarczana z FPC
191193
192194---
193195*From the Free Pascal wiki, page "FPTest/pl", as it stood on 2024-05-25 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history