Php 带事件订阅服务器的单元测试Symfony 2表单

Php 带事件订阅服务器的单元测试Symfony 2表单,php,phpunit,symfony-2.1,Php,Phpunit,Symfony 2.1,根据此处的教程: 我创建了一个使用事件订阅服务器的表单: class PageType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', 'text'); $blockSubscriber = new AddBlocksSubscriber($buil

根据此处的教程:

我创建了一个使用事件订阅服务器的表单:

class PageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'text');

        $blockSubscriber = new AddBlocksSubscriber($builder->getFormFactory());
        $builder->addEventSubscriber($blockSubscriber);
    }

    // ...
}
到目前为止还不错。。。直到我决定写一些单元测试“new”关键字的使用是有问题的,因为它阻止我使用模拟订户对象

我可以想出两种可能的解决办法:

  • 使用测试助手/课堂姿势,如下所述: 看起来有点麻烦,需要一个PHP扩展。必须这样做“感觉”不太对,但可能是一项切实可行的工作

  • 使用依赖项注入,例如,使PageType表单构造函数需要块订阅服务器的实例。 我在这里发现的问题是,要在表单之外创建订户对象,我还需要表单生成器的实例。由于表单通常是通过在控制器中调用
    createForm()
    来构建的,因此我通常不会从表单外部看到构建器

  • 或者,是否真的有必要对表单进行单元测试,或者使用爬虫对最终输出进行功能测试就足够了


    对于任何实现了一些Symfony2表单的人,我很想知道您是如何实现的。

    Symfony2食谱现在包含一章专门介绍表单单元测试: