【发布时间】:2015-01-31 21:44:17
【问题描述】:
在通过 Composer 更新我的代码之前,我的表单单元测试正在运行。它现在在扩展模拟上失败了。 这是错误:
Argument 1 passed to Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension::__construct() must be an instance of Symfony\Component\Validator\ValidatorInterface, instance of Mock_ValidatorInterface_14b95ba0 given
这是我的作曲家需要的部分:
"require": {
"php": ">=5.3.3",
"symfony/symfony": "~2.3",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "~1.0",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.3",
"symfony/monolog-bridge": "~2.4",
"sensio/distribution-bundle": "~2.3",
"sensio/framework-extra-bundle": "~2.3"
}
这是单元测试设置方法中的验证模拟:
use Symfony\Component\Form\Test\TypeTestCase;
use Symfony\Component\Form\Forms;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\Extension\Validator\Type\FormTypeValidatorExtension;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Form\Extension\Core\CoreExtension;
class TestedTypeTest extends TypeTestCase
{
protected function setUp()
{
parent::setUp();
$validator = $this->getMock('\Symfony\Component\Validator\Validator\ValidatorInterface');
$validator->method('validate')->will($this->returnValue(new ConstraintViolationList()));
$formTypeExtension = new FormTypeValidatorExtension($validator);
$coreExtension = new CoreExtension();
$this->factory = Forms::createFormFactoryBuilder()
->addExtensions($this->getExtensions())
->addExtension($coreExtension)
->addTypeExtension($formTypeExtension)
->getFormFactory();
}
有人知道模拟可能有什么问题吗?非常感谢任何建议。
【问题讨论】:
-
必须是 \Symfony\Component\Validator\ValidatorInterface" 与 "\Symfony\Component\Validator\Validator\ValidatorInterface" 的实例 你在模拟中似乎有太多的 'Validator'。跨度>
-
@AlisterBulman 是的,就是这样。删除第二个验证器有效。我使用 Symphony ~2.3 而不是 2.5,所以 Symfony\Component\Validator\Validator 的弃用在这里不适用。
标签: php unit-testing symfony composer-php