Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Testowanie modułów z użyciem frameworka SimpleTest

SimpleTest + Eclipse

Eclipse jest potężnym i, co najważniejsze, darmowym środowiskiem programistycznym IDE (ang. Integrated Development Environment), tworzonym w języku Java. Stoją za nim firmy takie, jak: IBM, Borland, QNX, Red Hat, SuSE i Rational. Co prawda Eclipse jest przeznaczony głównie dla Javy, ale dzięki łatwości rozbudowy powstało wiele wtyczek ułatwiających pracę w innych językach, w tym PHP.

Wartość Eclipse docenili także twórcy SimpleTestu, udostępniając swój plugin umożliwiający integrację frameworka z tym środowiskiem. Do poprawnego działania będziemy potrzebowali następujących pakietów:

  • Eclipse SDK, do pobrania ze strony http://www.eclipse.org/downloads/ index.php,
  • PHPeclipse - wtyczki umożliwiające pracę z PHP (a także z HTML-em i SQL-em). Pobierzemy je ze strony http:// sourceforge.net/projects/phpeclipse/,
  • Wtyczka SimpleTest - do pobrania ze strony projektu SourceForge.net: http:// sourceforge.net/projects/simpletest/.

Instalacja wtyczek polega na rozpakowaniu ich do katalogu plugins programu Eclipse. Po wykonaniu tej czynności możemy uruchomić IDE. Zanim wtyczka będzie gotowa do pracy, musimy ją skonfigurować. Z menu Window wybieramy pozycję Preferences. Po lewej stronie, na liście kategorii zaznaczamy pozycję SimpleTest. W polu tekstowym oznaczonym etykietą Php.exe file podajemy lokalizację wersji parsera PHP. Przykładowa ścieżka w systemie Windows może wyglądać następująco: c:\php\php.exe.

Pole Include file for tests powinniśmy zostawić puste. W ostatnie pole wpisujemy końcówkę plików z testami. Może to być np. .test.php lub po prostu .php. Okno konfiguracji powinno wyglądać teraz podobnie do tego, które pokazaliśmy na rysunku 3. Klikamy OK. Plugin jest już skonfigurowany, więc możemy już utworzyć nowy projekt:

  • Z menu wybieramy File-->New-->Project. Następnie wybieramy pozycję PHP Project. Klikamy Next.
  • W pole Project name wpisujemy nazwę, jaką wybraliśmy dla projektu, np.: MyCMS. Klikamy Finish.

Teraz musimy utworzyć jeszcze jeden projekt - tym razem dla testów. Wykonujemy czynności podobne jak poprzednio:

  • Z menu wybieramy File-->New-->Project, a następnie rozwijamy folder Simple i zaznaczamy pozycję Project. Klikamy Next.
  • Jako nazwę wpisujemy np. Test. Znowu klikamy Next.
  • Zaznaczamy nazwę projektu, do którego odnosić się będą testy. Wybieramy MyCMS i klikamy Finish.
  • Po lewej stronie okna mamy drzewo projektów - Navigator. Aby utworzyć nowy plik z pojedynczym przypadkiem testowym, zaznaczamy projekt Test, klikamy na niego prawym przyciskiem myszy i z menu wybieramy New-->File. Jako nazwę pliku możemy podać test.php. Klikamy Finish.

Plugin automatycznie włącza dla nas pliki potrzebne do uruchomienia frameworka testowego. Oznacza to, że powinniśmy includować tylko plik z klasami, które testujemy. Do pliku test.php wklejamy kod z Listingu 14 (zakładamy, że wcześniej utworzyliśmy klasę Validator w projekcie MyCMS).

Uruchamiamy testy

Uruchamianie testów w środowisku Eclipse jest szybkie i łatwe. Z drzewa projektu wybieramy plik test.php, klikamy na niego prawym przyciskiem myszy i z menu wybieramy Run As-->Run Simple- Test. Za moment ujrzymy na ekranie rezultat testu. Powinien on wyglądać mniej więcej tak, jak pokazaliśmy na Rysunku 4.

Grupowanie testów

Aby utworzyć zestaw testów, zakładamy nowy plik o nazwie grouptest.php i umieszczamy w nim kod podobny do przedstawionego na Listingu 15. Test uruchamiamy identycznie, jak pokazaliśmy przed chwilą.

Listing 12. Symulacja klasy DB

<?php
require_once('simpletest/mock_objects.php');
require_once('db.php');
Stub::generate('DB');
class NewsTest extends UnitTestCase {
    public function testNewsFinding() {
        $db = new StubDB();
        $db->setReturnValue('execute', array('title' => 'Sample news',
        'text' => 'news content');
        $news = findById(1, $db);
        $this->assertEqual($news->title, 'Sample news');
        $this->assertEqual($news->text, 'news content');
    }
}
?>

Listing 13. Zastosowanie klasy TextReporter.

<?php
require_once('simpletest/unit_tester.php');
require_once('simpletest/reporter.php');
require_once('phpsolmag/validator.php');
class ValidatorTestCase extends UnitTestCase{
    /* ... */
}
$test = new ValidatorTestCase();
$test->run(new TextReporter());
?>

Listing 14. Test klasy Validator dla pluginu SimpleTest-Eclipse

<?php
define('APP_PATH', 'C:/workspace/MyCMS');
require_once(APP_PATH . '/Validator.php');
class ValidatorTestCase extends UnitTestCase {
    public function testLogin() {
        $validator = new Validator();
        $this->assertTrue($validator->isValidLogin('testlogin'));
        $this->assertTrue($validator->isValidLogin('testlogin123'));
        $this->assertTrue($validator->isValidLogin('1234'));
        $this->assertIdentical($validator->isValidLogin('test^#login$&@'),false);
        $this->assertFalse($validator->isValidLogin(''));
        $this->assertFalse($validator->isValidLogin('abc'));
        $this->assertFalse($validator->isValidLogin('tenLoginJestZdecydowanieZaDlugi'));
    }
}
?>

Listing 15. Grupowanie testów w SimpleTest-Eclipse

class ExampleGroupTest extends GroupTest {
    public function __construct() {
        parent::construct();
        $this->addTestFile(dirname(__FILE__).'/test.php');
        // $this->addTestFile(dirname(__FILE__).'/test2.php');
        // $this->addTestFile(dirname(__FILE__).'/test3.php');
    }

Rysunek 4. Okno konfiguracji środowiska Eclipse

Rysunek 5. Środowisko Eclipse

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (1)
Usrapwnienia wizualne
Niedziela 15 Styczeń 2006 12:35:06 pm - aztech <scrabblewroclaw_at_op.pl>

Proponowałbym podlinkowanie wszystkich odnośników pojawiających (część jest, część natomiast nie - konrketnie w części artukułu: SimpleTest + Eclipse). Proponowałbym także wprowadzić podlinkowania do listingów (myślę, że to byłaby dobra praktyka dla wszystkich artykułów - szalenie ułatwia czytanie), ale tak aby przenosiły w miejsce listingu a nie tylko na stronę, gdzie znajduje się listing (a href="strona.html#name").
Można by w sumie też zrobić highlighting najważniejszych terminów, nazw klas, nazw funkcji (ale niekoniecznie, jeśli miałoby to zaciemnić artykuł).
P.S. Artykuł ciekawy. Z racji, że nigdy nie używałem SimpleTest, a zamierzam się nim pobawić po przeczytaniu artykułu, postaram się napisać wkrótce opinię, na ile sam artykuł pomaga w bezproblemowe (problemowe :D) wejście w SimpleTest

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2022 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System