0

phpspec でクラスをテストしようとしています。このクラスは、ZF2 で使用される通常の Service クラスです。

class GuestService implements ServiceLocatorAwareInterface
{
    public static function createWithServiceManager(ServiceLocatorInterface $serviceLocator)
    {
        $guestService = new GuestService();
        $guestService->setServiceLocator($serviceLocator);
        return $guestService;
    }

    public function setServiceLocator(ServiceLocatorInterface  $serviceLocator)
    {
        $this->services = $serviceLocator;
    } 
}

私のスペックは:

class GuestServiceSpec extends ObjectBehavior
{
    function let(ServiceLocatorInterface $serviceManager)
    {
        $this->beConstructedThrough('createWithServiceManager' , [$serviceManager]);
    }
}

最初にphpspecがserviceManagerオブジェクトを作成して、構築されたスルー関数を呼び出す方法を理解するのに苦労しています。Zend には、上記の静的メソッドと非常によく似た構造を可能にするファクトリ クロージャーがあります。

コンストラクターに渡すために Writer オブジェクトを使用するphpspec マニュアルのオブジェクト構築の例を見てきました。ただし、この Writer オブジェクトがどのように作成されるかについては説明していません。

そのページで、オブジェクトが phpspec 関数に渡される同様の例を見ることができます。

function it_does_something_if_argument_is_false(Writer $writer)
{
    $this->beConstructedWith($writer, false);
    // constructed with second argument set to false
    // ...
}

ただし、Writer オブジェクト自体がどのように構築されるかについては説明していません。serviceManager はどのように構築されますか?

4

2 に答える 2

0

あなたの場合$writer、 and$serviceManagerstubsです。PHPSpec はメソッド (WriterおよびServiceLocatorInterface) の型ヒントを解析し、リフレクションを使用してスタブを作成します。コピーされたメソッドを持つ元のクラスのコピーだけがありますが、実装はありません。

詳細はこちら

于 2015-04-30T14:07:48.193 に答える