如上所述here,可以创建自定义Type
。
我已经完成了,但现在我想测试课程,但不幸的是,这是不可能的。
事实上,自定义类型扩展了似乎无法实例化的类Doctrine\DBAL\Types\Type
。
事实上,它的构造函数是以这种方式构建的:
/**
* Prevents instantiation and forces use of the factory method.
*/
final private function __construct()
{
}
正如评论中所说,需要使用工厂方法来实例化类,但是,这种工厂方法是什么?我在哪里可以找到它?
答案 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);
}