2014-12-15 7 views
1

PHPSpec으로 테스트 할 때 실제 구체적인 클래스가 아닌 내 메소드에 주입 된 클래스 인터페이스를 어떻게 사용할 수 있습니까?PHPSpec을 사용할 때 클래스 인터페이스를 사용하는 방법

예를 들어 나는 방법에 VariationInterface를 주입 Product 클래스가 :

/** 
* ... 
*/ 
public function addVarient(VarientInterface $varient) 
{ 
    return $this->varients->add($varient); 
} 

비록 PHPSpec 난 정말 내 수업을 테스트하지 못할 VarientInterface Varient에 결합 할 IOC 컨테이너가 없기 때문에.

구체적인 클래스가 아닌 인터페이스에 코드를 작성하는 것이 좋지 않습니까?

+0

당신은 인터페이스가 아닌 구체적인 클래스에 코딩해야 조롱에 대해 offical 한 phpspec documentaion 확인하시기 바랍니다. 그러나 그것은 당신이하는 것이 아닙니다. 인터페이스에 "add"메서드가 없으므로 구현에 대해 실제로 코딩하는 것입니다. 또한 phpspec 문제 추적기에 대한 답변 : https://github.com/phpspec/phpspec/issues/584#issuecomment-67090359 –

답변

1

PHPSpec에서 구체적인 클래스와 인터페이스를 모의 할 수 있습니다.

이 예제를 확인하십시오 :

<?php 

//file spec/YourNameSpace/ProductSpec.php 

namespace spec\YourNameSpace\Product; 

use YourNameSpace\VarientInterface; 
use PhpSpec\ObjectBehavior; 

class ProductSpec extends ObjectBehavior 
{ 
    function it_is_varients_container(VarientInterface $varient) 
    { 
     $this->addVarient($varient); 

     $this->getVarients()->shouldBe([$varient]); 
    } 
} 

당신은 시험 방법에 매개 변수로 VarientInterface를 전달합니다. 이 VarientInterface는 PhpSpec에 의해 조롱을 받았습니다 (실제로 Prophecy에 의해).

http://www.phpspec.net/docs/introduction.html#prophet-objects

관련 문제