我使用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()
我不想为我使用的不同存储库编写所有注入方法。有没有其他方法来模拟注入的存储库?
答案 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());
}