2013-06-12 15 views
7

Wstydzę się zadać to pytanie, ale jestem ciekawy. Niedawno napisałem skrypt (bez organizowania kodu w modułach), który odczytuje pliki dziennika sklepu i zapisuje informacje w bazie danych.Perl: Jaka jest definicja testu?

Na przykład, napisałem coś takiego (przez Richarda Huxton):

while (<$infile>) { 
    if (/item_id:(\d+)\s*,\s*sold/) { 
     my $item_id = $1; 
     $item_id_sold_times{$item_id}++; 
    } 
} 
my @matched_items_ids = keys %item_id_sold_times; 
my $owner_ids = 
    Store::Model::Map::ItemOwnerMap->fetch_by_keys(\@matched_item_ids) 
    ->entry(); 
for my $owner_id (@$owner_ids) { 
    $item_id_owner_map{$owner_id}++; 
} 

powiedzieć, to skrypt nazywa script.pl. Podczas testowania pliku zrobiłem plik script.t i musiałem powtórzyć niektóre bloki script.pl w script.t. Po skopiowaniu odpowiednich sekcji kodu potwierdzam:

is($item_id_sold_times{1}, 1, "Number of sold items of item 1"); 
is($item_id_owner_map{3}, 8, "Number of sold items for owner 3"); 

itd. I tak dalej.

Ale niektórzy zwracają uwagę, że to, co napisałem, nie jest testem. To jest skrypt potwierdzający. Dobry test wymagałby napisania kodu z modułami, napisania skryptu, który kopie metody w modułach i napisania testu dla modułu.

To sprawiło, że pomyślałem o tym, co jest definicją testu najczęściej używanego w inżynierii oprogramowania. Być może niektórzy z was, którzy przetestowali nawet podstawowe funkcje Perla, mogą mi pomóc. Skrypt (niezmodyfikowany) nie może być właściwie przetestowany?

Pozdrowienia

+1

Powiem to moim rówieśnikom i jeśli będą dalej zadawać pytania, powiem im po prostu cytowanie Briana d Foy'a. Powinno to zadziałać tak, jak dowiedzieliśmy się z Twojej książki tutaj :) – ado

+0

Test (dobry) to coś, co dostarcza cennych informacji do niektórych interesariuszy. Zupełnie inne pytanie brzmi, jak powinieneś pisać testy jednostkowe dla skryptu Perla. :-) – Edu

Odpowiedz

10

Ważnym rozróżnieniem jest: Jeśli ktoś miałby edytować (poprawkę lub nową funkcję) swój plik "script.pl", uruchamiałby plik "script.t" w swoim obecnym stanie, przekazując użyteczne informacje o stanie nowy "script.pl"? Aby tak było, musisz mieć plik include lub use zamiast plików selektywnie kopiujących/wklejających.

W najlepszym przypadku projektujesz oprogramowanie modularnie i planujesz testowanie. Jeśli chcesz przetestować monolityczny skrypt po tym fakcie, przypuszczam, że możesz napisać skrypt testowy, który jest include s twoim głównym programem po exit() i przynajmniej masz podprogramy do testowania ...

2

bez uzyskiwania w porównaniu do weryfikacji walidacji, etc, test jest każda działalność, która sprawdza, czy zachowanie się coś innego, że zachowania dopasować wymogi i że pewne niepożądane zachowania nie występują. Zakres testu może być ograniczony (tylko zweryfikowanie kilku pożądanych zachowań) lub może być kompleksowy (weryfikujący większość lub wszystkie wymagane lub pożądane zachowania), prawdopodobnie z wieloma krokami lub komponentami do testu, aby to uczynić . Moim zdaniem pojęcie "potwierdzenie" w twoim kontekście to inny sposób powiedzenia "test ograniczonego zakresu". Z pewnością nie w pełni weryfikuje zachowanie twojego testu, ale coś robi. W bezpośredniej odpowiedzi na pytanie: myślę, że wywołanie tego, co zrobiłeś "potwierdzenie", jest tylko kwestią semantyki.

Powiązane problemy