0 follower

Funktionell testning

Före lÀsning av detta avsnitt rekommenderas lÀsning av Selenium-dokumentationen och PHPUnit-dokumentationen. HÀr följer en sammanfattning av de grundlÀggande principerna för hur man skriver ett funktionellt test i Yii:

  • Liksom för ett enhetstest Ă€r ett funktionellt test skrivet i form av en klass XyzTest som Ă€rver frĂ„n CWebTestCase, dĂ€r Xyz stĂ„r för klassen som skall testas. Eftersom PHPUnit_Extensions_SeleniumTestCase Ă€r förĂ€lder till CWebTestCase, kan vi anvĂ€nda alla metoder som Ă€rvs frĂ„n denna.

  • Klassen med det funktionella testet spara i en PHP-fil med namnet XyzTest.php. Enligt konvention sparas filen med det funktionella testet under katalogen protected/tests/functional.

  • Testklassen bestĂ„r i huvudsak av en uppsĂ€ttning testmetoder med namn som testAbc, dĂ€r Abc ofta Ă€r namnet pĂ„ den finess som Ă€r föremĂ„l för testning. För att till exempel testa funktionen logga in anvĂ€ndare, kan vi ha en testmetod med namnet testLogin.

  • En testmetod innehĂ„ller vanligen en sekvens av satser som ger ut kommandon till Selenium RC för interaktion med webbapplikationen som testas. Testmetoden innehĂ„ller ocksĂ„ assertion-satser för att verifiera att webbapplikationen svarar som förvĂ€ntat.

LÄt oss, innan vi beskriver hur man skriver ett funktionellt test, titta nÀrmare pÄ filen WebTestCase.php skapad av yiic webapp-kommandot. Denna fil definierar WebTestCase vilken kan tjÀnstgöra som basklass för alla klasser med funktionella test.

define('TEST_BASE_URL','http://localhost/yii/demos/blog/index-test.php/');
 
class WebTestCase extends CWebTestCase
{
    /**
     * Sets up before each test method runs.
     * This mainly sets the base URL for the test application.
     */
    protected function setUp()
    {
        parent::setUp();
        $this->setBrowserUrl(TEST_BASE_URL);
    }
 
    ......
}

Klassen WebTestCase sÀtter i huvudsak upp en bas-URL till sidorna som skall testas. Senare, i testmetoderna, kan relativa URL:er anvÀndas för att specificera vilka sidor som skall testas.

Det Àr vÀrt att notera Àr att i bas-URL:en för testning anvÀnds index-test.php som startskript, i stÀllet för index.php. Den enda skillnaden mellan index-test.php och index.php Àr att den förra anvÀnder filen test.php som applikationskonfiguration medan den senare anvÀnder main.php.

Nu kan vi beskriva hur man kan testa förfarandet för att visa en postning i applikationen blog demo. Först skriver vi testklassen som följer, med beaktande att testklassen Àrver frÄn basklassen vi just beskrivit:

class PostTest extends WebTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
    );
 
    public function testShow()
    {
        $this->open('post/1');
        // verify the sample post title exists
        $this->assertTextPresent($this->posts['sample1']['title']);
        // verify comment form exists
        $this->assertTextPresent('Leave a Comment');
    }
 
    ......
}

I likhet med hur vi skriver en klass för enhetstestning, deklarerar vi fixturerna som skall anvÀndas i aktuellt test. I detta fall indikerar vi att fixturen Post skall anvÀndas. I testmetoden testShow, instruerar vi först Selenium RC att öppna URL:en post/1. LÀgg mÀrke till att detta Àr en relativ URL och att den kompletta URL:en bildas genom att lÀgga till den till bas-URL:en som sattes upp i basklassen (dvs http://localhost/yii/demos/blog/index- test.php/post/1). DÀrefter verifierar vi att det gÄr att hitta titeln för postningen sample1 i den
för tillfÀllet visade webbsidan. Vi kontrollerar Àven att sidan innehÄller texten Leave a Comment.

Tips: Innan funktionella test kan köras mÄste Selenium-RC-servern startas. Detta kan göras genom exekvering av kommandot java -jar selenium-server.jar frÄn Selenium-serverns installationskatalog.

Found a typo, or you think this page needs improvement?
Edit it on GitHub !