2016-05-15 9 views
0

Ich bin ziemlich neu in der PHP Mockery-Framework, und versuchen, mehrere Funktionen auf eine verspottete Service-Anfrage-Funktion zu testen. Die verschiedenen Funktionen senden die gleichen Variablennamen mit unterschiedlichen Werten. Ich würde gerne testen, um sicherzustellen, dass jeder Fall die verspottete Klasse trifft. Kann ich mit meiner verspotteten Funktion mehrere Argumente erhalten und jedes davon zur Tester-Funktion zurückgeben?Rückmeldungen, die an eine Mockery-Funktion gesendet werden?

Die Funktion Test:

public function doSomething() { 
    $result = $this->serviceRequest('stuff', '/url', []); 
    return $result; 
} 

Der Pseudo-Code für Testfunktion:

public function testDoSomething() { 

    $service_mock = $this->mockService(); 
    $this->assertEquals($service_mock->doSomething(), $returnedArgs); 
} 

ich optimal auf die mock diese drei Argumente nehmen möchte wird sie mit dem Modell der gesendet wird, zurückkehren andReturn() oder etwas Ähnliches, das in der ursprünglichen Testmethode bestätigt wird (um zu überprüfen, dass sie zum Schein gesendet werden). Gibt es einen guten Weg, dies zu tun oder eine übliche Praxis, die ich vermisse?

Im Moment ist mein mock dieses Pseudo-Code ähnlich aussehend (und diese drei Argumente Schließung $args validiert werden):

 $client->shouldReceive('serviceRequest')->withArgs($args)->once()->andReturnUsing($args)->getMock(); 

Dank!

Antwort

2

Sie können einen Rückruf verwenden, um dies zu tun: Das folgende Beispiel ist von der Monialie Docs angepasst, obwohl es als Beispiel für die Referenz verwendet wird, kann es für alle benutzerdefinierten Erwartungen verwendet werden.

$m->shouldReceive('insert')->with(
    \Mockery::on(function(&$data) use($logger) { 
     if (!is_array($data)) return false; 
     $data['_id'] = 123; 
     $logger->logParameters('insert', $data); 
     return true; 
    }), 
    \Mockery::any() 
); 

http://docs.mockery.io/en/latest/reference/pass_by_reference_behaviours.htm

+1

Wenn Sie etwas verspotten müssen die Werte auf der Grundlage der Argumente zurückgibt und nicht gerade testen Sie, dass die Argumente sind das, was Sie sich erinnern erwarten 'andReturnUsing()' einen Verschluss wie der Fragesteller erwähnt akzeptiert. Es hat die Argumente übergeben, die der Methode übergeben wurden. – ToothlessRebel

Verwandte Themen