2013-08-22 109 views
2

我用TYPO3 6.1测试功能。Extbase:与注射库

其实我尝试使用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() 

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

+0

什么是'$这个 - > tokenHelperObj'以及你如何让存储库中有你的扩展代码(不是测试)? – Michael

+0

'$这个 - > tokenHelperObj'是它在初始化初始化我的灯具类,我想测试。我用'@ inject'注入我的库,就像写在问题中一样。 – freshp

回答

4

由于TYPO3 6.1 \ TYPO3 \ CMS \核心\测试\ 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()); 
} 
+0

您好,$ this-> inject($ target,$ name,$ dependency)方法位于\ TYPO3 \ CMS \ Extbase \ Tests \ Unit \ BaseTestCase中。不在“\ TYPO3 \ CMS \ Core \ Tests \ UnitTestCase”中! –

+0

'$ this-> fixture'看起来像什么?我在这里有点难住.. – pduersteler

+0

'$ this-> fixture'是你正在进行单元测试的类的主要实例。通常你在测试类的'setup()'中创建它。有关示例,请参阅https://github.com/derhansen/sf_event_mgt/blob/master/Tests/Unit/Service/ExportServiceTest.php(请注意,我的变量被称为'$ subject'而不是'$ fixture') – derhansen