Как получить классы связки модульного теста, которые содержат зависимости - PullRequest
1 голос
/ 16 января 2012

У меня есть проект 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? Если так, куда это должно пойти?

1 Ответ

2 голосов
/ 16 января 2012

Раньше я не использовал 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...