Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phpunit Extbase:使用注入的存储库测试功能_Phpunit_Typo3_Extbase - Fatal编程技术网

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

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-

我使用typo36.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()

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

自从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