Sign in Join
Wiki copytemporary

FPTest/pl: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: FPTest/pl

OldNewLine
1+FPTest (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.
2+
3+Wiele 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]].
4+
5+## Właściwości
6+
7+Cele projektowe stosowane podczas opracowywania projektu, niekoniecznie w określonej kolejności:
8+
9+- Wprowadzenie do SetUpOnce i TearDownOnce dla TestCase i TestSuite.
10+- Poprawienie szybkość wykonywania testu.
11+- Wprowadzenie do wielu "projektów" i otwórzenie drogi do uruchamiania testów projektów w osobnych wątkach.
12+- Poprawienie łatwości korzystania z FPTest (częściowo poprzez dodanie więcej przykładowej dokumentacji).
13+- Upewnienie się, że TTestCase *Constructors* i *Destructors* wykonują się tylko raz, a nie dla każdej zawartej metody testowej.
14+- Zapewnienie nieglobalnych środków do udostępniania danych konfiguracji wysokiego poziomu między jednostkami testowymi.
15+- Bardziej dokładne wyniki testów i ulepszone informacje zwrotne.
16+- Zapewnienie wizualnej liczby wykrytych wycieków pamięci i testów bez funkcji Check().
17+- Zapewnia opcjonalną liczbę określającą, które wywołania funkcji Check() zakończyły się niepowodzeniem.
18+- Czyszczenie kodu poprzez usunięcie starszego kodu w FPTest, takiego jak Delphi Win32 i specyficzny kod .Net.
19+- Text Test Runner dla tych, którzy lubią konsole lub dla nienadzorowanych pakietów testów działających na serwerach.
20+- Nowy GUI Test Runner do [[fpGUI]] lub projektów opartych na LCL.
21+- Znacznie bardziej zaawansowany Test Decorator, który faktycznie działa (FPCUnit jest całkowicie zepsuty).
22+- 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.).
23+
24+## Aktualny stan
25+
26+- Nowy kod pozostaje zgodny z istniejącymi zestawami testów, które nie polegają na kodzie DUnit zmodyfikowanym przez użytkownika.
27+- 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.
28+- Nowy kod pozostaje kompatybilny z istniejącymi zestawami testów, które nie polegają na funkcjach TestFramework niskiego poziomu (np.TTestResult).
29+- Nowy kod wprowadza klasę Project i ProjectManager między GUI a TextTestRunners, aby pomóc w przyszłym wprowadzeniu wątkowych testów jednostkowych.
30+- 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.*
31+- Nowy kod dekoracji testów jest łatwiejszy do zrozumienia i rozszerzenia.
32+- 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).
33+- 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.
34+- Obsługiwane są wszystkie istniejące procedury sprawdzania. Dodano kilka nowych procedur sprawdzania, aby uzupełnić dostępny zakres.
35+- Utworzono nowe testy jednostkowe, aby zweryfikować, czy wszystkie procedury Check () wykrywają warunki powodzenia i niepowodzenia.
36+- Wszystkie testy przebiegają bez wycieków pamięci lub konieczności zezwalania na wycieki.
37+- Nowe testy jednostkowe autotestu są bardziej kompleksowe i obejmują sprawdzenie, czy warunki konfiguracji są prawidłowo spełnione przed wykonaniem wymaganych testów.
38+- Klasa Project obsługuje teraz rejestrację i wykonywanie zgrupowanych TestCases (TestSuites) i TestCases.
39+- 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.
40+- Niezoptymalizowane puste testy nadal kończą się niepowodzeniem.
41+- Testy, które nie wywołują funkcji Check(), mogą zostać uzbrojone globalnie, aby zakończyć się niepowodzeniem, tj. Z poziomu interfejsu GUI.
42+- Podobnie testy powodujące wycieki pamięci mogą opcjonalnie zostać uzbrojone globalnie, aby zakończyć się niepowodzeniem.
43+- Poszczególne testy mogą opcjonalnie zastąpić powyższe ustawienia GUI. (np. w przypadku znanego wycieku z komponentu strony trzeciej)
44+- Wszystkie testy, które zastępują ustawienia GUI, można opcjonalnie zidentyfikować po wykonaniu testu za pomocą dodatkowych kolorów węzłów.
45+- Liczba zastąpionych niepowodzeń testów jest uwzględniana na ekranie statusu wykonania.
46+- 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.
47+- Nazwy metod testowych są oddzielone od procesu wykonywania, umożliwiając wyświetlanie informacji po kompilacji na poziomie GUI.
48+- Dodano generator raportów XML, uzupełniający zarówno GUITestRunner, jak i TextTestRunner.
49+- Dodano możliwość w GUITestRunner i TextTestRunner, aby pomijać (wykluczać) poszczególne testy niezależnie od włączonych/wyłączonych testów.
50+- Przyciski narzędzi do GUITestRunner ułatwiające sterowanie i pokazujące w czasie wykonywania, które opcje programowe zostały wybrane.
51+
52+Aby 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.
53+
54+## Pobieranie kodu źródłowego
55+
56+Kod źródłowy jest bezpłatnie dostępny z GitHub za pomocą następującego polecenia:
57+
58+``` bash
59+git clone git://github.com/graemeg/fptest.git
60+```
61+
62+lub
63+
64+``` bash
65+git clone https://github.com/graemeg/fptest.git
66+```
67+
68+Jeś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.
69+
70+[`https://github.com/graemeg/fptest/tarball/master`](https://github.com/graemeg/fptest/tarball/master)
71+
72+Projekt 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.
73+
74+## Dokumentacja
75+
76+Dokumentację FPTest można znaleźć w katalogu *docs* jako pliki HTML.
77+
78+## Przykład użycia Test
79+
80+To jest przykładowy projekt testowania w konsoli
81+
82+``` pascal
83+program project1;
84+
85+{$mode objfpc}{$H+}
86+
87+uses
88+ Classes,
89+ TextTestRunner,
90+ sample_tests;
91+
92+begin
93+ // Rejestrowanie wszystkich testów
94+ sample_tests.RegisterTests;
95+
96+ RunRegisteredTests;
97+end.
98+```
99+
100+oraz moduł zawierający rzeczywiste testy...
101+
102+``` pascal
103+unit sample_tests;
104+
105+{$mode objfpc}{$H+}
106+
107+interface
108+
109+uses
110+ TestFramework; // wymagane dla odwołania się do TTestCase i CheckXXX()
111+
112+type
113+ TTestCaseFirst = class(TTestCase)
114+ published
115+ procedure TestWarning;
116+ procedure TestOne;
117+ procedure TestNoError;
118+ procedure TestThree;
119+ procedure TestFour;
120+ end;
121+
122+procedure RegisterTests;
123+
124+implementation
125+
126+uses
127+ SysUtils;
128+
129+{ Tutaj rejestrujemy wszystkie nasze klasy testowe }
130+procedure RegisterTests;
131+begin
132+ TestFramework.RegisterTest(TTestCaseFirst.Suite);
133+end;
134+
135+{ TTestCaseFirst }
136+
137+procedure TTestCaseFirst.TestWarning;
138+begin
139+ // Nic tu nie rób - powinno wywołać ostrzeżenie
140+end;
141+
142+procedure TTestCaseFirst.TestOne;
143+begin
144+ Check(1 + 1 = 3, 'Katastrofalna porażka arytmetyczna!');
145+end;
146+
147+procedure TTestCaseFirst.TestNoError;
148+begin
149+ Check(1 + 1 = 2, 'Katastrofalna porażka arytmetyczna!');
150+end;
151+
152+procedure TTestCaseFirst.TestThree;
153+var
154+ s: string;
155+begin
156+ s := 'cześć';
157+ CheckEquals('Cześć', s, 'Niepowodzenie CheckEquals');
158+end;
159+
160+procedure TTestCaseFirst.TestFour;
161+var
162+ x, y: integer;
163+begin
164+ x := 10;
165+ y := 0;
166+ Check(x / y = 0, 'Niepowodzenie dla 1');
167+end;
168+
169+end.
170+```
171+
172+## Zrzuty ekranu
173+
174+Oto zrzut ekranu z wyjściem narzędzia Text Test Runner.
175+
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>
180+
181+To jest zrzut ekranu z GUI Test Runner (przy użyciu fpGUI Toolkit) do uruchomienia zestawu testów tiOPF.
182+
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>
187+
188+## Jak wypada to w porównaniu do FPCUnit?
189+
190+Ja (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.
191+
192+Dobra 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.
193+
194+## Zobacz także
195+
196+- [[fpcunit/pl|fpcunit]] Struktura testów jednostkowych dostarczana z FPC
197+
198+---
199+*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