2017-09-29 26 views
0

私はSymfony 3.3とPHPUnit 5.7を使用しています。私はAPIコントローラをテストするためのサービスを模擬しようとしています。PhpUnitとSymfony:モックサービスが動作しない

コントローラ:

class ApiTestManager extends BaseApiController{ 
    public function getAction(): View 
    { 
     $response = $this->get('app.business.test_api')->getResponse(); 
     return $this->view($response); 
    }} 

テストクラス:

class ApiTestManagerTest extends WebTestCase { 
public function testApiCall() 
{ 
    $client = static::createClient(); 

    $service = $this->getMockBuilder(ApiTestManager::class) 
     ->disableOriginalConstructor() 
     ->setMethods(['getResponse']) 
     ->getMock() 
     ->expects($this->any()) 
     ->method('getResponse') 
     ->will($this->returnValue(new Response())); 

    $client->getContainer()->set('app.business.test_api', $service); 
    $client->request('GET', 'de/api/v1/getResponse'); 

    $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
}} 

が、私は間違いを見つけようとして時間を過ごしましたが、毎回私はそれは私に、次のエラーが発生します。このテストを実行します。

Error: Call to undefined method PHPUnit_Framework_MockObject_Builder_InvocationMocker::getResponse() 

誰も私のコードで何が間違っていると言うことができますか?ありがとう:)

+0

私は 'getMockBuilder()'のパラメータとして完全修飾クラス名を使用することをお勧めします。そして、正しいWebTestCaseクラス、 'Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase'を拡張しましたか? –

+0

残念ながら、これは違いはありません...はい、正しいWebTestCase :) – jennymo

答えて

1

多分ですか?それは私が見る唯一のものです...

$service = $this->getMockBuilder(ApiTestManager::class) 
     ->disableOriginalConstructor() 
     ->setMethods(['getResponse']) 
     ->getMock(); 
$service->expects($this->any()) 
     ->method('getResponse') 
     ->will($this->returnValue(new Response())); 
+0

はい、それは動作します、ありがとう...しかし、私はなぜ理解していません:あなたは私が前にしたような方法をチェーンできない理由を知っていますか? ? – jennymo

+0

は本当になぜ理解できないのですか? 'getMock()'が 'generator'の結果を返すのを見ることができますが、私はドキュメント、サンプル、プロジェクトで常にこの方法を見てきました... –

関連する問題