Nawiązując do wpisu, który zamieściłem wcześniej o przekazywaniu zmieninnych pomiędzy testami, chciałem przedstawić krótką instrukcję dotyczącą wykonywania różnych funkcjonalności przed i po testach.
Metody setUp() i tearDown()
Metody te służą do wywołania odpowiednich funkcjonalności w sytuacji, gdy chcemy aby były one wywołane odpowiednio przed testami i po nich. Metoda setUp() może być więc wykorzystana do utworzenia instancji obiektu, na którym następnie zostanie przeprowadzony odpowiedni test. Natomiast metoda tearDown() wywoła się po zakończeniu testu, a więc, mówiąc kolokwialnie, możemy jej użyć do posprzątania.
Na co jednak należy zwrócić uwagę w przypadku tych dwóch metod. Otóż medoty te wywoływane są przed i po każdym z testów zawartych w klasie testowej. Dla poniższego kodu zostaną więc wywołane w sumie 3 razy.
class FooTest extends ControllerTestCase { public function setUp() { echo 'jestem setUp<br />'; } public function tearDown() { echo 'jestem tearDown<br />'; } public function testCanCheckFoo1() { echo 'jestem testCanCheckFoo1<br />'; } public function testCanCheckFoo2() { echo 'jestem testCanCheckFoo2<br />'; } public function testCanCheckFoo3() { echo 'jestem testCanCheckFoo3<br />'; } }
Efektem będzię więc wyświetlenie następującej sekwencji komunikatów:
jestem setUp jestem testCanCheckFoo1 jestem tearDown jestem setUp jestem testCanCheckFoo2 jestem tearDown jestem setUp jestem testCanCheckFoo3 jestem tearDown
Metody setUpBeforeClass() i tearDownAfterClass()
Czasami jednak zdaża się, że potrzebujemy wywołać jakieś funkcjonalności przed wszystkimi testami, a na końcu po nich posprzątać. Tutaj właśnie przydatne nam będą wspomniane wyżej metody – setUpBeforeClass() i tearDownAfterClass(). Najprościej będzie to prześledzić na kodzie, którym wcześniej sprawdzaliśmy setUp() i tearDown().
class FooTest extends ControllerTestCase { public static function setUpBeforeClass() { echo 'jestem setUp<br />'; } public static function tearDownAfterClass() { echo 'jestem tearDown<br />'; } public function testCanCheckFoo1() { echo 'jestem testCanCheckFoo1<br />'; } public function testCanCheckFoo2() { echo 'jestem testCanCheckFoo2<br />'; } public function testCanCheckFoo3() { echo 'jestem testCanCheckFoo3<br />'; } }
W tym wypadku wynik działania powyższej klasy testującej wygląda tak:
jestem setUp jestem testCanCheckFoo1 jestem testCanCheckFoo2 jestem testCanCheckFoo3 jestem tearDown
Jak widać są to kolejne przydatne elementy PHPUnit, które ułatwią nam pracę z testami jednostkowymi.
Prawie dziala
Fatal error: Cannot make static method PHPUnit_Framework_TestCase::setUpBeforeClass() non static in class
Zgadza się – zapomniałem o static. Już jest zaktualizowany wpis.