2

私はTYPO3 6.1を使用しています。

実際に、注入されたリポジトリを使用する phpunit でメソッドをテストしようとしています。

$mock = $this->getMockedRepository(
    '\\MyExt\\Domain\\Repository\\MyRepository',
    array(
        'findByUid' => array('count' => 0, 'return' => array()),
    )
);
$this->tokenHelperObj->injectMyRepository($mock);

関数getMockedRepositoryは、 phpunitからgetMock関数を呼び出す単なるヘルパーです。他のコンテキストでは、この機能は機能します。私のヘルパークラスでは、次のような依存性注入を使用するだけです

/**
 * myRepository
 *
 * @var \MyExt\Domain\Repository\MyRepository
 * @inject
 */
protected $myRepository;

テストを呼び出すと、

Call to undefined method Class::injectActivityRepository()

私が使用するさまざまなリポジトリのすべての注入方法を書きたくありません。注入されたリポジトリをモックする他の方法はありますか?

4

1 に答える 1

4

TYPO3 6.1 以降、クラス \TYPO3\CMS\Core\Tests\UnitTestCase は inject() と呼ばれる新しいメソッドで拡張されました。このメソッドは依存関係を注入するために使用できるため、注入メソッドを作成する必要はありません。

使用法:

$this->inject($target, $name, $dependency)

以下に、テスト例を示します。

/**
 * @test
 */
public function serviceReturnsFalseIfNoRecordsFoundTest() {
    $mockQuery = $this->getMock('TYPO3\CMS\Extbase\Persistence\QueryInterface');

    $mockRepository = $this->getMock('\TYPO3\MyExtension\Domain\Repository\TestRepository');
    $mockRepository->expects($this->once())->method('findAll')->will($this->returnValue($mockQuery));

    $this->inject($this->fixture, 'testRepository', $mockRepository);

    $this->assertTrue($this->fixture->doSomething());
}
于 2013-08-28T06:52:22.160 に答える