2011-11-02 16 views
7

Mamy napisane parsery dla różnych formatów danych naukowych w Perlu. Ostatnio dodałem zestaw testów z plikiem parser_*.t dla każdego formatu i podformularza.Jak zaplanować dodatkowe testy prowadzone przez zewnętrzny sub?

Oczywiście interfejs API parserów jest dokładnie taki sam, tylko dane z plików przykładowych, które są używane do testowania, są różne. Aby uprościć pliki testowe, napisałem sub, który przekazuje obiekt analizatora składni i strukturę mieszającą reprezentującą oczekiwane dane. Wygląda na to,

my $parser = new MyApp::Parser($file); 
test_nested_objects = ($parser, { 
    property1 => "value", 
    property2 => 123, 
    subobject_accessor => { 
     property3 => "foobar", 
    } 
} 

sub test_nested_objects spacery mieszania i testuje na wszystkie właściwości określone w mieszania, np jeśli można wywołać subobject_accessor, zwraca obiekt i ten obiekt można nazwać property3.

Sprawdziłem, ile testów jest przeprowadzanych przez cały plik *.t i dodano tests => 123 do wszystkich plików *.t. Teraz dodałem kilka kontroli do funkcji ogólnej i wszystkie plany są błędne.

Jak uczynić mój plan świadomym podtestów? Chciałbym, aby osiągnąć następujące:

  • liczby badań podanych przed uruchomieniem ich do widzenia progess
  • łączna liczba wzrosła automatycznie → bez zmiany numerów ręcznie podczas edycji SUB
  • indywidualnych testów w sub visible, gdy działasz, udowadniaj (ukrywanie testów w sub i zwracanie tylko 0 lub 1 jest niedopuszczalne, ponieważ naprawdę muszę wiedzieć, co jest nie tak z przeanalizowanymi danymi)

Mam nadzieję, że rozumiesz. Przepraszam za długą historię, ale myślałem, że ludzie prawdopodobnie nie zrozumieją bez wiedzy w tle.

Odpowiedz

10

Najnowszym trendem w planowaniu testów jest po prostu tego nie robić. Na końcu pliku testowego, deklarujesz, że dobiegł końca:

done_testing(); 

Wiele zastosowania planu testowego istnieje tylko w celu zapewnienia, że ​​skrypt testowy zakończony. Jeśli zobaczył odpowiednią liczbę testów, scenariusz musiał przejść całą drogę do końca. To nie prawda, ale jest to wygodna i praktyczna fikcja.

Jeśli trzeba zrobić kilka obliczeń, aby określić liczbę testów, takich jak pomiar wielkości struktury danych, czy to wtedy nazwać plan później:

use Test::More; # don't declare the plan yet 

my $test_count = ...; 

plan tests => $test_count; 

Zamiast wielkie plany, jednak możesz podzielić swoje testy na podtesty. Każdy podtestu ma tylko wiedzieć, ile testów biegnie, a skrypt musi tylko znać liczbę podtestach:

subtest some_label => sub { 
     plan tests => $n; 
     ... 
     }; 

Każde z połączeń do funkcji testowania byłby jeden test, a funkcja będzie używać Poddajcie się próbie wykonania tego, co chcecie, bez zbytniego ujawniania jego rozmówcy.

0

Jeśli liczba podtestów na format jest znana, można wykonać obliczenia testów w bloku BEGIN przed użyciem Test :: Więcej.

Powiązane problemy