Я использую Symfony2 (2.6) PHPUnit. Я хотел бы узнать, как модуль проверки ограничения валидатор в Symfony 2,6Ограничения валидатора модулей тестирования
пароль ограничение
<?php
namespace Test\MainBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
class Password extends Constraint
{
public $message = "user.password_regex";
}
Ограничение валидатор пароля
<?php
namespace Test\MainBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class PasswordValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!preg_match('/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z0-9]{6,}+$/', $value, $matches)) {
$this->context->buildViolation($constraint->message)
->setParameter('%string%', $value)
->addViolation();
}
}
И мой тест попробовать
<?php
namespace Test\MainBundle\Tests\Component\Validator\Constraints;
use Test\MainBundle\Component\Validator\Constraints\Password;
use Test\MainBundle\Component\Validator\Constraints\PasswordValidator;
class PasswordTest extends \PHPUnit_Framework_TestCase
{
private $constraint;
public function setUp()
{
$this->constraint = new Password();
}
public function testFailureValidate()
{
$context = $this
->getMockBuilder('Symfony\Component\Validator\ExecutionContext')
->disableOriginalConstructor()
->getMock();
$context
->expects($this->once())
->method('buildViolation')
->with($this->constraint->message, array());
$validator = new PasswordValidator();
$validator->initialize($context);
$validator->validate('test', $this->constraint);
}
public function testSuccessValidate()
{
$validator = new PasswordValidator();
$context = $this
->getMockBuilder('Symfony\Component\Validator\ExecutionContext')
->disableOriginalConstructor()
->getMock();
$validator->initialize($context);
$validator->validate('Testing007', $this->constraint);
}
}
Пожалуйста, не могли бы вы помочь мне решить эту проблему?
Заранее спасибо.
Если у вас есть хороший образец об модульном тестировании в приложении symfony2, мне очень интересно.
Где конкретно в тесте сделать что-то пойдет не так? – Oldskool
На самом деле я получаю PHP Неустранимая ошибка: вызов неопределенного метода Mock_ExecutionContext_a2d8943d :: buildViolation() на testFailureValidate() – gab89
Проблема может быть вызвана издевательским контекстом Symfony (setParameter, addViolation не издевается). Обычно я не тестирую этот шаблон Symfony (меня не интересуют ограничения, контекст и нарушения). Я просто извлекаю метод из 'if' и проверяю только метод, который возвращает boolean. В вашем случае я бы опробовал открытый метод 'isPasswordInvalid'. –