我有一个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文件中定义我的服务吗?如果是的话,应该去哪里?
答案 0 :(得分: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());
}
}