如何测试Doctrine自定义类型

时间:2016-10-06 15:33:42

标签: doctrine-orm doctrine

如上所述here,可以创建自定义Type

我已经完成了,但现在我想测试课程,但不幸的是,这是不可能的。

事实上,自定义类型扩展了似乎无法实例化的类Doctrine\DBAL\Types\Type

事实上,它的构造函数是以这种方式构建的:

/**
 * Prevents instantiation and forces use of the factory method.
 */
final private function __construct()
{
}

正如评论中所说,需要使用工厂方法来实例化类,但是,这种工厂方法是什么?我在哪里可以找到它?

1 个答案:

答案 0 :(得分:1)

通过模拟中的not replacing any methods和来自github上的问题的some tips的组合,我能够对学说类型进行单元测试。我想这适用于平台不相关的简单类型。对于更复杂的类型行为,您可以使用不同的模拟替换平台。

/**
 * @test
 */
public function willCastValueToInt()
{
    $typeBuilder = $this
        ->getMockBuilder(IntegerType::class)
        ->disableOriginalConstructor()
        ->setMethods(null);

    $type = $typeBuilder->getMock();
    $platform = $this->getMockForAbstractClass(AbstractPlatform::class);

    $result = $type->convertToPHPValue('3', $platform);

    $this->assertSame(3, $result);
}