4

PHPUnit を使用して Symfony の機能テストを作成していますが、モックが機能しません。ただし、それらがどのように機能するかを誤解している可能性があります。

単体テストのsetUp()メソッドには、次のコードがあります。

...
// Create a stub
$stub = $this->getMockBuilder('\\ApiBundle\\Util\\WordPressBridge')
    ->disableOriginalConstructor()
    ->getMock();

// Configure the stub.
$user = new WordPressUser();
$user->setUsername('dummy');
$stub->expects($this->any())
     ->method('checkCredentials')
     ->will($this->returnValue(true));
$stub->expects($this->any())
     ->method('getUser')
     ->will($this->returnValue($user));
...

私の Symfony アプリケーションでは、サービスが定義されています。

services:
    api.wp_bridge:
        class: ApiBundle\Util\WordPressBridge
        arguments: [@service_container]

モックをリアルに置き換える必要があることは私の理解ですWordPressBridgeが、それは起こっていることではありません。私のオリジナルはまだ使用されています。何か不足していますか?

4

1 に答える 1

4

モックを実際のWordPressBridgeに置き換える必要があることは私の理解ですが、それは起こっていることではありません。私のオリジナルはまだ使用されています。私は何かが足りないのですか?

基本的に、Symfonyコンテナでサービスを何らかの方法で置き換える必要があります。

「機能テスト」を行う場合は、おそらく「テスト」環境用のテスト「ダミー」サービスを作成する必要がありますこれにより、元のサービスが上書きされます。あなたはそのようなことをすることができます:

src / YourBundle / Resources / config/services.ymlにあります

services:
    api.wp_bridge:
        class: %api.wp_bridge.class%
        arguments: [@service_container]

app / config/config.yml

parameters:
    api.wp_bridge.class: "ApiBundle\Util\WordPressBridge"

app / config/config_test.yml

parameters:
    api.wp_bridge.class: "ApiBundle\Util\TestWordPressBridge"

次に、機能テストは「ApiBundle \ Util\TestWordPressBridge」を使用します-「test」環境で実行されるためです。

コンテナをモックしてテストカーネルに渡すこともできますが、他のモックライブラリ(純粋なPHPUnit)がないと苦痛を伴う可能性があります。

個人的には、モックが簡単な「ユニット」テストにphpspec2を使用しています:)そして、 behatminkを使用しているいくつかの「受け入れ基準」に使用しています。

于 2013-02-24T19:19:47.660 に答える