Marcin
Federowicz
Morizon.pl - Od
wyszukania do
zamieszkania
Temat: phpunit - jak zasymulować puknięcie w api aby...
WitamMam następujący przypadek jest sobie controller Abc:
class AbcController extends Zend_Controller_Action
{
public function indexAction()
{
$uri = 'http://localhost/rest/api/dane'
$username = "Ala";
$password = "Kota";
$rest = new Zend_Rest_Client();
$restrequest = $rest->getHttpClient()
->setAuth($username,$password)
->setUri($uri)
->request('GET');
if ($restrequest->getStatus() == 200) {
//sukces mozemy wyswietlic dane
$result = $restrequest->getBody();
print $result;
}else{
//niepowodzenie brak danych lub api nie działa
}
}
}
Chciałbym napisać testy (przynajmniej dwa :)) aby można było zweryfikować poprawność działania metody indexAction(). Plik z testami wygląda mniej więcej tak:
<?php
require_once 'PHPUnit/Framework/TestCase.php';
class AbcControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function setUp()
{
$this->bootstrap = array($this, 'appBootstrap');
parent::setUp();
}
public function appBootstrap()
{
$this->_application = new Zend_Application(APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$this->_application->bootstrap();
$front = Zend_Controller_Front::getInstance();
if ($front->getParam('bootstrap') === null) {
$front->setParam('bootstrap', $this->_application->getBootstrap());
}
}
public function tearDown()
{
/* Tear Down Routine */
}
public function testAbc_Index_Method()
{
$this->dispatch('/abc');
}
}
Wiem że powyższy test jest nie kompletny bo nie ma weryfikacji żadnych warunków, ale nie o to mi chodzi. Chodzi mi o to iż owszem powyższy test się wykona, ale podczas jego wykonywania nastąpi puknięcie z interfejs restowy a tego bym nie chciał (tzn chciałbym ale,chciałbym pukać w interfejs nie istniejący czyli taki który sobie stworze w momencie wykonywania testu). Wiem że jest cos takiego jak Mock'owanie obiektów ale taki zapis:
$this->dispatch('/abc');
$rest = $this->getMock('Zend_Rest_Client');
$restrequest = $rest
->getHttpClient()
->setAuth(USER_LOGIN, USER_LOGIN)
->setUri('http://localhost/rest/api/dane')
->request('GET');
Ani taki:
$rest = $this->getMock('Zend_Rest_Client');
$restrequest = $rest
->getHttpClient()
->setAuth(USER_LOGIN, USER_LOGIN)
->setUri('http://localhost/rest/api/dane')
->request('GET');
$this->dispatch('/abc');
Nie zadziała poprawnie ponieważ w obydwu przypadkach zostanie wykonana metoda indexAction() ale nie mam żadnego wpływu na wynik zwrócony z interfejsu restowego przez co nie będę mógł przetestować np przypadku gdy interfejs nie działa
Nigdzie nie mogę znaleźć rozwiązania powyższego problemu. Znalazłem owszem przykłady testowania samych zapytań do interfejsu i odpowiedzi, ale przypadku gdzie testowana by była metoda która w sobie ma puknięcie w inny interfejs nigdzie nie znalazłem.
Czy taka sytuacja jest możliwa w ogóle do przetestowania przy pomocy phpunit albo może gdzieś popełniam błąd?
Jestem otwarty na sugestie, podpowiedzi, krytyke :)Marcin Federowicz edytował(a) ten post dnia 24.04.11 o godzinie 23:50