Phpunit Extbase:使用注入的存储库测试功能
我使用typo36.1 我实际上试着用phpunit测试一个方法,它使用注入的存储库Phpunit Extbase:使用注入的存储库测试功能,phpunit,typo3,extbase,Phpunit,Typo3,Extbase,我使用typo36.1 我实际上试着用phpunit测试一个方法,它使用注入的存储库 $mock = $this->getMockedRepository( '\\MyExt\\Domain\\Repository\\MyRepository', array( 'findByUid' => array('count' => 0, 'return' => array()), ) ); $this->tokenHelperObj-
$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()
我不想为我使用的不同存储库编写所有注入方法。有没有其他方法来模拟注入的存储库?自从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());
}
自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());
}
什么是
$this->tokenHelperObj
以及如何在扩展代码(而不是测试)中获取存储库?$this->tokenHelperObj
是我的fixture类,它在设置时初始化,我想测试。我用@inject
像问题中写的那样注入我的存储库。$this->tokenHelperObj
是什么?如何在扩展代码(而不是测试)中获取存储库?$this->tokenHelperObj
是我的fixture类,在设置时初始化,我想测试它。我用@inject
注入我的存储库,就像问题中写的那样。您好,$this->inject($target,$name,$dependency)方法在\TYPO3\CMS\Extbase\Tests\Unit\BaseTestCase中。不在“\TYPO3\CMS\Core\Tests\UnitTestCase”中<代码>$this->fixture是您正在进行单元测试的类的主要实例。通常在测试类的setup()
中创建它。请参见示例(注意,我的变量名为$subject
而不是$fixture
),方法$this->inject($target,$name,$dependency)位于\TYPO3\CMS\Extbase\Tests\Unit\BaseTestCase中。不在“\TYPO3\CMS\Core\Tests\UnitTestCase”中<代码>$this->fixture是您正在进行单元测试的类的主要实例。通常在测试类的setup()
中创建它。请参阅以获取示例(注意,我的变量名为$subject
,而不是$fixture
)