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.jarfrån Selenium-serverns installationskatalog.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.