Symfony形式单元测试

Symfony形式单元测试,symfony,phpunit,Symfony,Phpunit,如何对具有entity父级的FormType进行单元测试?还是phpUnit应该忽略该类?代码包括在下面 1)审计\ReceiptBundle\Tests\Form\Type\ContactTypeTest::testSubmitValidData Symfony\Component\OptionsResolver\Exception\MissingOptionsException:缺少必需的选项“class”。 class ContactType extends AbstractType {

如何对具有entity父级的FormType进行单元测试?还是phpUnit应该忽略该类?代码包括在下面

1)审计\ReceiptBundle\Tests\Form\Type\ContactTypeTest::testSubmitValidData
Symfony\Component\OptionsResolver\Exception\MissingOptionsException:缺少必需的选项“class”。

class ContactType extends AbstractType
{

    public function __construct()
    {
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'empty_value' => 'Choose a Contact',
        ));
    }

    public function getParent()
    {
        return 'entity';
    }

    public function getName()
    {
        return 'contact';
    }

}
测试代码:

protected function getExtensions()
{
    return array(new PreloadedExtension(array(
            'entity' => $this->mockFieldEntityType(),
                ), array()));
}

public function testSubmitValidData()
{

    $formData = [
    ];

    $type = new ContactType();
    $resolve = new \Symfony\Component\OptionsResolver\OptionsResolver();
    $resolve->setDefaults([
        'class' => 'foo:bar'
    ]);
    $type->setDefaultOptions($resolve);
    $form = $this->factory->create($type);

    // submit the data to the form directly
    $form->submit($formData);

    $this->assertTrue($form->isSynchronized());
    $this->assertEquals($formData, $form->getData());

    $view = $form->createView();
    $children = $view->children;

    foreach (array_keys($formData) as $key) {
        $this->assertArrayHasKey($key, $children);
    }
}
mockFieldEntityType()取自中提供的答案

protected function mockFieldEntityType() {
    $mockEntityManager = $this->getEntityManager();

    $mockRegistry = $this->getMockBuilder('Doctrine\Bundle\DoctrineBundle\Registry')
        ->disableOriginalConstructor()
        ->getMock();

    $mockRegistry->expects($this->any())->method('getManagerForClass')
        ->will($this->returnValue($mockEntityManager));

    $mockEntityManager->expects($this->any())->method('getClassMetadata')
        ->withAnyParameters()
        ->will($this->returnValue(new ClassMetadata('entity')));


    $entityType = new EntityType($mockRegistry);

    return $entityType;
}