Napisany lip-27-2009
asercja
Pojęcie asercji wiąże się ściśle z etapem testowania napisanego kodu. Zazwyczaj przyjmuje formę wyrażenia logicznego, które zwraca albo prawdę albo fałsz. Stanowi więc doskonałe narzędzie, dzięki któremu możemy w prosty sposób, wychwycić błędy w pisanych aplikacjach. W PHP dostęp do asercji umożliwiają dwie funkcje assert() i assert_options(). Aby dobrze zrozumieć omawiane zagadnienie, spójrzmy na poniższy przykład.
Asercja w praktyce
Na początek zasada działania funkcji assert().
// asercja z wyrażeniem logicznym które jest zawsze prawdziwe
assert ('12>1');
Wykonanie powyższego kodu zakończy się sukcesem, gdyż wyrażenie podane jako parametr funkcji będzie zawsze prawdziwe. Wprowadźmy więc małą zmianę:
// asercja z wyrażeniem logicznym które jest zawsze fałszywe
assert ('12<1');
Tym razem zostanie zgłoszony błąd, zgodnie z ustawieniami zdefiniowanymi przy użyciu assert_options(). U mnie na wyjściu otrzymałem następujący komunikat:
Nasuwa się więc prosty wniosek. Gdy warunek podany w asercji nie jest spełniony jesteśmy w stanie dostrzec i wyeliminować potencjalne błędy w kodzie. Popatrzmy na bardziej skomplikowany przykład:
function getnews ($id) {
//sprawdzamy czy przekazano integer
assert ('is_int($id)');
echo $id;
}
getnews('3');
Powyższy skrypt zgłosi błąd, gdyż do funkcji przekazano string a nie integer. Asercja nie została spełniona.
Na koniec pozostało omówienie opcji, które pozwalają skonfigurować asercje w PHP. Do tego celu używa się funkcji assert_options($option,$value), gdzie pierwszym parametrem jest konkretna opcja, a drugim jej nowa wartość. Jeśli $value nie zostanie przekazana, to zwrócona zostanie bieżąca wartość opcji $option. Opcje konfiguracyjne przedstawiają się następująco:
- ASSERT_ACTIVE - asercja włączona lub nie. (true lub false)
- ASSERT_WARNING - asercja generuje ostrzeżenie PHP. (true lub false)
- ASSERT_QUIET_EVAL - generowanie komunikatu w przypadku, gdy w trakcie obliczania wyrażenia logicznego przekazanego w asercji wystąpi błąd. (true lub false)
- ASSERT_BAILE - niespełniona asercja zatrzymuje wykonywanie skryptu. (true lub false)
- ASSERT_CALLBACK - nazwa funkcji, która jest wywoływana w przypadku niespełnienia asercji.
To tylko zalążek możliwości jakie oferuje asercja, a zarazem wstęp do pisania testów jednostkowych. Zainteresowanych odsyłam TUTAJ. W przyszłości postaram się do tego tematu powrócić.
