2013-07-24 30 views
1

我想测试一个使用实体管理器的自定义验证器。单元测试 - 使用实体管理器的自定义类验证

的验证是形式工作正常,但我仍然有问题,测试它:它不会抛出违反

我的验证是类验证但违反添加到$this->context->addViolationAt('lastname',$message,$param);

有一个在我的测试类代码:

public function testNoMoreThreeBatman() { 

    $validator = Validation::createValidatorBuilder()->getValidator(); 

    //I have already checked I got my test database ok, full with what I want 

    //I create a new one with the name 'wayne' (so it'll be not valid) 
    $user = new User(); 
    $user->setLastname('wayne'); 

    $violationList = $validator->validate($user); 

    $this->assertEquals(1, $violationList->count()); 

} 

我已经找到了很多话题,但没有人给我提示。我有另一个自定义验证测试,一个简单的,我没有问题。 我游荡,如果这个问题可能来自实际上它是一类验证或事实上,它违反添加到现场

因为我的答案是一个评论,我在这里发表于响应的更多的知名度:

正确的是Validation::createValidatorBuilder()->getValidator();

而不是$validator = Validation::createValidatorBuilder()->getValidator();

+0

嗯。你的验证器甚至被称为?我怀疑不是。我假设你将用户映射到validation.yml中的验证器?如果是这样,那么你需要更多的东西来将验证器绑定到配置文件。 – Cerad

+0

如何查看我的验证程序是否被调用?是的,我的验证器映射在我的validation.yml中,并且在我的表单中使用它时工作正常 – goto

回答

1

因此,虽然其真正的功能测试,我想你最好的选择是只抢验证器服务:

class MyTest extends Symfony\Bundle\FrameworkBundle\Test\WebTestCase 
{ 
    public function test() 
    { 
     $client = static::createClient(); 
     $validator = $client->getContainer()->get('validator'); 

     ... 

======================================== =====================

你能解释调用static :: get('validator')和Validation :: createValidatorBuilder之间的区别吗?

在回答你的评论时,我不知道静态在哪里:你指的是从哪里来的。你在单元测试中使用了哪些基类?但它并不重要,因为我认为static :: get正在访问依赖注入容器。

所以你的问题是真的:使用Symfony 2容器和实际的组件本身有什么区别?

需要理解的是,当您启动Symfony 2应用程序时,会读取各种配置文件,并在幕后发生所有类型的事件。特别是,一个名为验证器的服务被创建并通过诸如validation.yml之类的东西进行初始化。同样,您的自定义验证程序已创建并作为依赖项传递给您的实体管理器。

当你仅仅使用Validation :: createValidatorBuilder时,就不会发生这种情况。没有配置,没有映射,没有实体经理等。看看代码,看看实际发生了什么。查看组件文档以了解如何直接使用它。这实际上是值得的练习,因为它有助于理解Symfony如何连接所有东西。

+0

我可以访问static :: get('validator')而不是我的Validation :: createValidatorBuilder() - > getValidator() ;它工作正常!非常感谢。你可以解释调用static :: get('validator')而不是$ this-> get('validator')或Validation :: createValidatorBuilder() - > getValidator()之间的区别。 – goto

相关问题