मैं ContainsItalianVatinValidator
कस्टम सत्यापनकर्ता का परीक्षण कैसे कर सकता हूं, लेकिन डब्ल्यू * कंटेनर * और validator
सेवा (और इस प्रकार, एक स्टब ऑब्जेक्ट बनाएं) तक पहुंचने के बिना?सिम्फनी 2.1 में यूनिट परीक्षण कस्टम सत्यापन बाधा लेकिन कंटेनर तक पहुंच के बिना?
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
// ...
}
}
अपने परीक्षण मामले में मुझे लगता है मैं ConstraintViolationList
का उपयोग करना चाहिए पता है, लेकिन मैं यह कैसे सत्यापनकर्ता से ही करने के लिए पता नहीं है:
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());
}
}
मैं एक सेवा में सत्यापन तर्क निकालेगा और इस सेवा के लिए यूनिट परीक्षण लिखूंगा। सत्यापनकर्ता वर्ग के अंदर आप सेवा के साथ अपनी बाधा जांचते हैं और सत्यापन विफल होने पर एक संदेश जोड़ते हैं। इस प्रकार आपका सत्यापन तर्क ढांचे के साथ नहीं है और भविष्य में बदलावों के लिए अधिक मजबूत है। – fabwu