2012-01-15 44 views
1

我有一個Symfony 2項目和一些定製的包含其他服務依賴項的定製類(服務)。我無法弄清楚如何使用服務容器測試我的類。例如,我有以下課程;如何獲取包含依賴關係的單元測試包類

namespace My\FirstBundle\Helper; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class TextHelper { 

    public function __construct(ContainerInterface $container) { 
//.. etc 

現在,在我的單元測試我伸出\作爲PHPUnit_Framework_TestCase的我會在任何其他情況,但我怎麼能測試具有依賴我TextHelper類?我可以在新的services_test.yml文件中定義我的服務嗎?如果是這樣,它應該去哪裏?

回答

2

我之前沒有使用Symfony 2,但我期望您可以創建必要的依賴關係 - 或更好的模擬對象 - 並將它們放置到每個測試的容器中。

作爲一個例子,假設你想測試TextHelper::spellCheck()應該使用字典服務來查找每個單詞並替換任何不正確的。

class TextHelperTest extends PHPUnit_Framework_TestCase { 
    function testSpellCheck() { 
     $container = new Container; 
     $dict = $this->getMock('DictionaryService', array('lookup')); 
     $dict->expects($this->at(0))->method('lookup') 
       ->with('I')->will($this->returnValue('I')); 
     $dict->expects($this->at(1))->method('lookup') 
       ->with('kan')->will($this->returnValue('can')); 
     $dict->expects($this->at(2))->method('lookup') 
       ->with('spell')->will($this->returnValue('spell')); 
     $container['dictionary'] = $dict; 
     $helper = new TextHelper($container); 
     $helper->setText('I kan spell'); 
     $helper->spellCheck(); 
     self::assertEquals('I can spell', $helper->getText()); 
    } 
} 
相關問題