Faction (Polski)
Faction to biblioteka C do tworzenia oprogramowania w oparciu o testy.
Instalacja
Zainstaluj pakiet libfactionAUR.
Użycie
Biblioteka udostępnia kilka makr C, aby przyspieszyć pisanie testów.
- FI reprezentuje inicjalizację Faction (Faction Initialization)
- FT oznacza test Faction (Faction Test)
- FC oznacza zamknięcie Faction (Faction Close)
Przy użyciu makra FT wymagane są trzy pola.
- AUTHORS() pobiera oddzieloną przecinkami listę nazwisk autorów otoczonych podwójnymi cudzysłowami.
- SPEC() przyjmuje pojedynczy opis specyfikacji testu otoczony podwójnym cudzysłowem
- Wyrażenie logiczne C (tak jak przy użyciu makr C assert)
Konwencja nakazuje, aby testy Faction były pisane na dole pliku źródłowego zawierającego kod, który będzie testowany. Testy powinny być otoczone osłoną makra FACTION (patrz poniższy przykład), aby można je było włączyć/wyłączyć w czasie kompilacji. Kompilatory języka C, takie jak GNU C Compiler (GCC), oferują możliwość włączenia makr w wierszu poleceń (np. flaga -D
).
Przykład
/* To jest funkcja do przetestowania */ int increment(int input) { return (input + 1); } #ifdef FACTION #include <faction.h> #include <limits.h> FI FT( AUTHORS( "timetoplatypus" ), SPEC( "increment() zwraca 1 po podaniu 0" ), increment(0) == 1 ); FT( AUTHORS( "timetoplatypus" ), SPEC( "increment() zwraca 0 po podaniu największej wartości całkowitej" ), increment(INT_MAX) == 0 ); FC #endif
Można to skompilować za pomocą gcc nazwa_pliku.c -D FACTION
.
Tryby
Istnieją dwa tryby, w których Faction może się kompilować: minimalnym i rozszerzonym.
Powyższy przykład kompiluje Faction w trybie minimalnym. Minimalna kompilacja ma dokładnie trzy zależności biblioteczne: stdlib, stdio i getopt. Rozszerzona kompilacja ma dodatkowe zależności, w tym niektóre funkcje, które są dostępne tylko poprzez makro GNU feature test.
Tak więc, aby skompilować w trybie rozszerzonym, wystarczy zdefiniować makro GNU feature test na początku pliku. Na przykład, poprzedni przykład zmodyfikowany do kompilacji w trybie rozszerzonym wyglądałby następująco:
#ifdef FACTION #define _GNU_SOURCE #endif
/* To jest funkcja do przetestowania */ increment(int input) { return (input + 1); } #ifdef FACTION #include <faction.h> #include <limits.h> FI FT( AUTHORS( "timetoplatypus" ), SPEC( "increment() zwraca 1 po podaniu 0" ), increment(0) == 1 ); FT( AUTHORS( "timetoplatypus" ), SPEC( "increment() zwraca 0 po podaniu największej wartości całkowitej" ), increment(INT_MAX) == 0 ); FC #endif
Funkcje trybu rozszerzonego
W trybie rozszerzonym,
- dane wyjściowe mogą być opcjonalnie kopiowane do pliku dziennika określonego przez użytkownika przy użyciu flagi
-l
w czasie wykonywania. - Tabela wyników będzie dynamicznie dostosowywana do szerokości używanego terminala. W przeciwnym razie domyślnie przyjmuje szerokość 78 znaków.