2013-04-16 4 views
6

Ich versuche, Mocker behaupten, dass eine bestimmte Methode mindestens einmal aufgerufen wird.Mockery sollte Receive() -> einmal() scheint nicht zu funktionieren

Meine Testklasse ist:

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(); 
    } 

} 

Wie Sie sehen können, gibt es einen Test, dass (hoffentlich) eine Erwartung erzeugt, dass setUri aufgerufen wird. Da es keinen anderen Code gibt, kann ich mir nicht vorstellen, dass es heißen könnte und trotzdem mein Test bestanden wird. Kann mir jemand erklären warum?

Antwort

38

Sie müssen Mockery:close() anrufen, um Nachweise für Ihre Erwartungen auszuführen. Es behandelt auch die Bereinigung des Spottcontainers für den nächsten Testfall.

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

Um zu vermeiden, die Close-Methode in jedem Testklasse aufrufen, können Sie die Testlistener auf Ihre phpunit Config fügen Sie einfach wie folgt:

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

Dieser Ansatz im docs erläutert.

Eine Sache von den verlinkten Dokumente zu beachten ist:

Stellen Sie sicher, Komponisten oder Mockery Autoloader- ist in der Bootstrap-Datei oder Sie müssen auch eine „Datei“ Attribut definieren, um die Datei der obigen Testlistener zeigen Klasse.