Witajcie! Już dawno nie pisałem na blogu, ale o tym później (nie dzisiaj :)). Ostatnio jestem strasznie zarzucony pracą i staram się robić wszystko tak szybko, jak to tylko możliwe, ale na pierwszym miejscu stawiam raczej „porządne” wykonanie poszczególnych elementów, bo „kto szybko robi, ten dwa razy robi”. Pisząc testy jednostkowe do jednej z bibliotek pomocniczych trafiłem na problem z ignorowaniem pojedynczych testów w poszczególnych zestawach. Dzisiaj chciałbym Wam pokazać, jak sobie z tym poradzić.
Fotografia: Gino Santa Maria @ Fotolia.
PHPUnit: Ignorowanie pojedynczych testów.
Oczywiście taki test można po prostu zakomentować, ale to raczej słabe i mało profesjonalne rozwiązanie. Okazuje się, że PHPUnit (a przynajmniej klasa PHPUnit_Framework_TestCase) zawiera w sobie metody pozwalające na ignorowanie testów. Wystarczy na początku testowanej metody umieścić wywołanie metody „markTestIncomplete”:
// (...)
public function testOurCustomFunction()
{
$this->markTestIncomplete();
// (...)
}
// (...)
Podczas testowania dany element zostanie wtedy oznaczony jako „ignored”, co zostanie zasygnalizowane literką I. Szybko, prosto i przyjemnie.
Dziękuję za uwagę i do zobaczenia kolejnym razem. :)
Warto przeczytać.
Trwa ładowanie…
I znowu potwierdza się stara jak świat zasada, że człowiek uczy się całe życie :D Dzięki wielkie!
Jak zrobić szlifierkę z dysku twardego?
HA! Kwestia dobrego IDE, w PHPStormie jak tworzysz testy „z automatu”, to wszystkie są incomplete, puki się ich nie uzupełni.
Kolekcje
@Michał Wachowski: Ja właśnie korzystam z PHPStorma, ale testy piszę samodzielnie – napisanie „public function test*() {}” aż tak dużo nie zajmuje. Chyba, że jest coś, o czym nie wiem, wtedy zamieniam się w słuch. ;]
PHPUnit: Ignorowanie pojedynczych testów.
Prawy guzik na pliku/źródle -> Generate PHPUnit Test -> podać lokalizację -> cieszyć się pustym testem zawierającym: setUp, tearDown i wszystkie metody :)
A i odpalić go sobie można :)
Kolekcje
@Michał Wachowski: Faktycznie, jest coś takiego, nawet się nie przyjrzałem wcześniej. ;] Generuje toto kod klasy testowej, ale:
* zazwyczaj testy nie nazywają się tak, jak metody, tylko opisują to, co się dzieje, np. testErrorOnInvalidData(),
* plik kończy się znacznikiem ?> i pustą linią pod spodem. Niby nic wielkiego, ale brzydko wygląda,
* ja pod testy podpinam zazwyczaj w bootstrapie jakiś autoloader klas (zgodny z PSR-0, bo aktualnie coraz więcej piszę kodu z namespace’ami), a PHPStorm wstawia tam na wejściu require_once().
Jak tylko ogarnę, jak zmusić PHPStorma do generowania tej klasy bez metod testujących (i tego, co wymieniłem wyżej), to będę z tego korzystał. Pewnie trzeba tylko pogrzebać w szablonach plików. Niemniej jednak dzięki za informacje. ;]
PHPUnit: Ignorowanie pojedynczych testów.
Przejrzyj szablony, to sobie usuniesz/dodasz co trzeba.
Mi się nie chce ich modyfikować nawet :)
Co do nazewnictwa testów – zależy co testujesz – interfejs czy funkcjonalność.
Metoda ma zwracać wartość danego typu przecież, zaś funkcjonalność ma wykonać pewne działanie – efekt działania nie musi być przecież wynikiem metody (szczególnie przy method chaining).
I tyle z mojej wiedzy o testach :D
Kolekcje
Całkiem przydatna informacja, szczególnie jeżeli chcemy sobie czasowo wyłączać jakieś testy.
PHPUnit – przekazywanie zmiennych pomiędzy testami