Extbase:使用注入的存储库测试功能

时间:2013-08-22 12:46:25

标签: phpunit typo3 extbase

我使用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 -function的帮助器。在其他情况下,此功能有效。在我的助手班中,我只使用依赖注入,如

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

当我打电话给考试时,我得到了

Call to undefined method Class::injectActivityRepository()

我不想为我使用的不同存储库编写所有注入方法。有没有其他方法来模拟注入的存储库?

1 个答案:

答案 0 :(得分:4)

自TYPO3 6.1以来,已经使用名为inject()的新方法扩展了类\ TYPO3 \ CMS \ Core \ Tests \ UnitTestCase。此方法可用于注入依赖性,因此您不必创建注入方法。

用法:

$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());
}