2013-06-15 10 views
9

We wszystkich tutorialach, które przeczytałem dla Test::Class, wydaje się, że istnieje jeden skrypt biegacza, który ładuje wszystkie klasy. I myślę, że z perspektywy Test::Harness jest to tylko jeden wielki test. Nie sądzę, że może to zrównoważyć testy wewnątrz biegacza.Test Can :: Testy klas mogą być wykonywane równolegle? (lub jak wyprowadzić testy nadklasy)

Mój X problem polega na tym, że próbuję wyodrębnić zachowanie nadklasy podczas testowania podklas. Każda podklasa powinna mieć swój własny test podklasy (który może być zrównoleglony), ale także wykonywać zachowania odziedziczone po nadklasie. Jak to zrobić?

Edytuj: Znalazłem te dwa posty z 2007 roku, które zdają się sugerować, że to, o co prosiłem, jest niezgodne/niemożliwe. Jakieś aktualizacje od tego czasu?

+0

Możesz zajrzeć do 'forkprove', ale nie jestem sur e jeśli działa z 'Test :: Class' poprawnie – Taras

+1

Najwyraźniej' Test :: Harness' ma kontrolę nad równoległym wykonaniem testu: http://stackoverflow.com/questions/11977015/how-to-run-some-but -nie-wszystkie-testy-w-a-perl-test-suite-w-równoległym – fenway

+0

Oczywiście, że tak. Ale używam Test :: Class, a nie Test :: Harness. –

Odpowiedz

5

Test::Class nie obsługuje parallelisation na własną rękę. Prawdopodobnie najprostszym rozwiązaniem byłoby mieć oddzielne biegacze .t dla każdej z twoich klas testowych (lub dla grup logicznych klas testowych), i uruchamiać używając np. prove -j9.

Jeśli naprawdę chcesz uruchomić wszystkie testy równolegle, możesz napisać prosty skrypt, aby automatycznie wygenerować plik .t dla każdej klasy testowej. Straciłbyś korzyści związane z wydajnością działania wielu klas testowych w ramach jednego interpretera perl, ale równoległość może zrekompensować dodatkowe narzut uruchomienia. I twierdzę, że niezależnie od tego, jak bardzo Test::Class próbuje zapewnić izolację testową, nie można zagwarantować tego w Perlu. Gdy zaczniesz korzystać z modyfikacji tabeli symboli dla celów szyderczych itp., Twoje testy zaczną się wzajemnie zakłócać, chyba że otrzymasz porządek. Uruchamianie każdego testu w oddzielnym interprerze języka Perl jest lepszym sposobem na zapewnienie gwarantowanej izolacji.

3

Aby wykonać test :: Class równolegle, użyłem następującego mechanizmu. Mam nadzieję, że to ci pomoże.

Użyłem modułu do wywołania testów. Ale miał

parametryzowane zmienną środowiskową TEST_METHOD, tak że wymagane testy są prowadzone

w każdym wątku równolegle

Zapewnia to izolację między innymi testami, ponieważ każda próba jest wywoływana niezależnie i

procesowi wątku można zarządzać tak długo, aż proces potomny zostanie zakończony.

Powiązane problemy