Làm thế nào tôi có thể kiểm tra đơn vị ContainsItalianVatinValidator
trình xác thực tùy chỉnh, nhưng w * ithout truy cập vào vùng chứa * và dịch vụ validator
(và do đó, tạo đối tượng gốc)?Kiểm tra đơn vị kiểm tra ràng buộc tùy chỉnh trong Symfony 2.1 nhưng không truy cập vào vùng chứa?
class ContainsItalianVatinValidator extends ConstraintValidator
{
/**
* @param mixed $value
* @param \Symfony\Component\Validator\Constraint $constraint
*/
public function validate($value, Constraint $constraint)
{
if (!preg_match('/^[0-9]{11}$/', $value, $matches)) {
$this->context->addViolation($constraint->message, array(
'%string%' => $value
));
}
// Compute and check control code
// ...
}
}
Trong trường hợp thử nghiệm của tôi tôi biết tôi nên truy cập vào ConstraintViolationList
, nhưng tôi không biết làm thế nào để làm điều đó từ các validator bản thân:
class ContainsItalianVatinValidatorTest extends \PHPUnit_Framework_TestCase
{
public function testEmptyItalianVatin()
{
$emptyVatin = '';
$validator = new ContainsItalianVatinValidator();
$constraint = new ContainsItalianVatinConstraint();
// Do the validation
$validator->validate($emptyVatin, $constraint);
// How can a get a violation list and call ->count()?
$violations = /* ... */;
// Assert
$this->assertGreaterThan(0, $violations->count());
}
}
Tôi sẽ trích xuất logic xác thực thành dịch vụ và viết kiểm tra đơn vị cho dịch vụ này. Bên trong lớp trình duyệt tính hợp lệ, bạn kiểm tra ràng buộc của mình với dịch vụ và thêm một thông báo nếu việc xác thực thất bại. Qua đó, logic xác thực của bạn không được kết hợp với khung công tác và mạnh mẽ hơn cho các thay đổi trong tương lai. – fabwu