2013-04-16 9 views
6

Próbuję przekonać Mockery, że dana metoda jest wywoływana co najmniej raz.Mockery shouldReceive() -> once() nie działa

Moja Klasa testu jest:

use \Mockery as m; 

class MyTest extends \PHPUnit_Framework_TestCase 
{ 

    public function testSetUriIsCalled() 
    { 
     $uri = 'http://localhost'; 
     $httpClient = m::mock('Zend\Http\Client'); 
     $httpClient->shouldReceive('setUri')->with($uri)->atLeast()->once(); 
    } 

} 

Jak widać, istnieje jeden test, który (mam nadzieję) tworzy oczekiwanie, że setUri zostanie wywołana. Ponieważ nie ma w tym żadnego innego kodu, nie mogę sobie wyobrazić, że można go wywołać, a jednak mój test mija. Czy ktoś może wyjaśnić, dlaczego?

Odpowiedz

38

Musisz zadzwonić pod numer Mockery:close(), aby przeprowadzić weryfikację zgodnie z Twoimi oczekiwaniami. Zajmuje się również oczyszczaniem kontenera kpiny z następnej tacki.

public function tearDown() 
{ 
    parent::tearDown(); 
    m::close(); 
} 
2

Aby uniknąć konieczności wzywania ścisłej metody w każdej klasie testowej, można po prostu dodać TestListener do phpunit config tak:

<listeners> 
    <listener class="\Mockery\Adapter\Phpunit\TestListener"></listener> 
</listeners> 

Podejście to zostało wyjaśnione w docs.

Jedną rzeczą, aby pamiętać, ze związanymi docs jest:

Upewnij kompozytora lub autoloader kpina jest obecny w pliku bootstrap lub trzeba będzie również zdefiniować „plik” atrybut wskazujący na plik powyższej TestListener klasa.

Powiązane problemy