Sign in Join
Wiki copytemporary

FPTest/pl: what changed

Revision 1 to 2. 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
7070[`https://github.com/graemeg/fptest/tarball/master`](https://github.com/graemeg/fptest/tarball/master)
7171
7272Projekt 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.
7373
7474## Dokumentacja
7575
7676Dokumentację FPTest można znaleźć w katalogu *docs* jako pliki HTML.
7777
7878## Przykład użycia Test
7979
8080To jest przykładowy projekt testowania w konsoli
8181
8282``` pascal
8383program project1;
8484
8585{$mode objfpc}{$H+}
8686
8787uses
8888 Classes,
8989 TextTestRunner,
9090 sample_tests;
9191
9292begin
9393 // Rejestrowanie wszystkich testów
9494 sample_tests.RegisterTests;
9595
9696 RunRegisteredTests;
9797end.
9898```
9999
100100oraz moduł zawierający rzeczywiste testy...
101101
102102``` pascal
103103unit sample_tests;
104104
105105{$mode objfpc}{$H+}
106106
107107interface
108108
109109uses
110110 TestFramework; // wymagane dla odwołania się do TTestCase i CheckXXX()
111111
112112type
113113 TTestCaseFirst = class(TTestCase)
114114 published
115115 procedure TestWarning;
116116 procedure TestOne;
117117 procedure TestNoError;
118118 procedure TestThree;
119119 procedure TestFour;
120120 end;
121121
122122procedure RegisterTests;
123123
124124implementation
125125
126126uses
127127 SysUtils;
128128
129129{ Tutaj rejestrujemy wszystkie nasze klasy testowe }
130130procedure RegisterTests;
131131begin
132132 TestFramework.RegisterTest(TTestCaseFirst.Suite);
133133end;
134134
135135{ TTestCaseFirst }
136136
137137procedure TTestCaseFirst.TestWarning;
138138begin
139139 // Nic tu nie rób - powinno wywołać ostrzeżenie
140140end;
141141
142142procedure TTestCaseFirst.TestOne;
143143begin
144144 Check(1 + 1 = 3, 'Katastrofalna porażka arytmetyczna!');
145145end;
146146
147147procedure TTestCaseFirst.TestNoError;
148148begin
149149 Check(1 + 1 = 2, 'Katastrofalna porażka arytmetyczna!');
150150end;
151151
152152procedure TTestCaseFirst.TestThree;
153153var
154154 s: string;
155155begin
156156 s := 'cześć';
157157 CheckEquals('Cześć', s, 'Niepowodzenie CheckEquals');
158158end;
159159
160160procedure TTestCaseFirst.TestFour;
161161var
162162 x, y: integer;
163163begin
164164 x := 10;
165165 y := 0;
166166 Check(x / y = 0, 'Niepowodzenie dla 1');
167167end;
168168
169169end.
170170```
171171
172172## Zrzuty ekranu
173173
174174Oto zrzut ekranu z wyjściem narzędzia Text Test Runner.
175175
176-<figure>
177-<img src="fptest_console.png" title="Przykładowe dane wyjściowe konsoli Text Test Runner." />
178-<figcaption>Przykładowe dane wyjściowe konsoli Text Test Runner.</figcaption>
179-</figure>
176+![](/wiki-images/8/80/Fptest_console.png)
180177
181178To jest zrzut ekranu z GUI Test Runner (przy użyciu fpGUI Toolkit) do uruchomienia zestawu testów tiOPF.
182179
183-<figure>
184-<img src="fptest_fpgui.png" title="Zrzut ekranu narzędzia uruchamiania testów GUI przy użyciu zestawu narzędzi fpGUI." />
185-<figcaption>Zrzut ekranu narzędzia uruchamiania testów GUI przy użyciu zestawu narzędzi fpGUI.</figcaption>
186-</figure>
180+![](/wiki-images/0/0a/Fptest_fpgui.png)
187181
188182## Jak wypada to w porównaniu do FPCUnit?
189183
190184Ja (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.
191185
192186Dobra 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.
193187
194188## Zobacz także
195189
196190- [[fpcunit/pl|fpcunit]] Struktura testów jednostkowych dostarczana z FPC
197191
198192---
199193*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