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 回答