gpt4 book ai didi

php - 使用 symfony2.3 进行单元测试验证器约束

转载 作者:可可西里 更新时间:2023-11-01 00:32:03 25 4
gpt4 key购买 nike

我想使用约束制作一个测试单元,但在运行测试时出现此错误

这是我的不同类和运行phpunit后的获取错误

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/
class Age18 extends Constraint
{
public $message = 'Vous devez avoir 18 ans.';

}


use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class Age18Validator extends ConstraintValidator
{
public function validate($dateNaissance, Constraint $constraint)
{
if ($dateNaissance > new \DateTime("18 years ago"))
{
$this->context->addViolation($constraint->message);
}
}
}


use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class Age18ValidatorTest extends \PHPUnit_Framework_TestCase
{
private $constraint;

public function setUp()
{
$this->constraint = $this->getMock('Symfony\Component\Validator\Constraint');
}

public function testValidate()
{
/*ConstraintValidator*/
$validator = new Age18Validator();
$context = $this
->getMockBuilder('Symfony\Component\Validator\ExecutionContext')
->disableOriginalConstructor()
->getMock('Age18Validator', array('validate'));

$context->expects($this->once())
->method('addViolation')
->with('Vous devez avoir 18 ans.');
$validator->initialize($context);
$validator->validate('10/10/2000', $this->constraint);
}

public function tearDown()
{
$this->constraint = null;
}
}

Expectation failed for method name is equal to <string:addViolation> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.

你能帮我解决这个问题吗?

谢谢!!

最佳答案

检查元素的类型:在验证器类中,您在两个 DateTime 对象之间使用比较器,但在测试中,您将一个字符串传递给验证器。

这是我的测试类:

namespace Acme\DemoBundle\Tests\Form;

use Acme\DemoBundle\Validator\Constraints\Age18;
use Acme\DemoBundle\Validator\Constraints\Age18Validator;

class Age18ValidatorTest extends \PHPUnit_Framework_TestCase
{
private $constraint;
private $context;

public function setUp()
{
$this->constraint = new Age18();
$this->context = $this->getMockBuilder('Symfony\Component\Validator\ExecutionContext')->disableOriginalConstructor()->getMock();
}

public function testValidate()
{


/*ConstraintValidator*/
$validator = new Age18Validator();
$validator->initialize( $this->context);

$this->context->expects($this->once())
->method('addViolation')
->with($this->constraint->message,array());
$validator->validate(\Datetime::createFromFormat("d/m/Y","10/10/2000"), $this->constraint);
}

public function tearDown()
{
$this->constraint = null;
}
}

希望对你有帮助

关于php - 使用 symfony2.3 进行单元测试验证器约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26550521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com