2016-10-06 4 views
0

hereと記載したように、カスタムを作成することは可能です。TypeDoctrineカスタムタイプをテストする方法

私はそれをしましたが、今はクラスをテストしたいと思いますが、残念ながらこれは不可能です。

Infactでは、カスタムタイプは、インスタンス化できないと思われるクラスDoctrine\DBAL\Types\Typeを拡張します。このファクトリメソッドが何であるかをコメントで語ったよう

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

、それはクラスをインスタンス化するファクトリメソッドを使用することが必要ですが、、:

Infactは、そのコンストラクタはこのように構築されていますか?どこで見つけることができますか?

+0

例として、このテストhttps://github.com/doctrine/dbal/blob/master/tests/Doctrine/Tests/DBAL/Types/DecimalTestを参照してくださいあなたは、DBALテストスイートを見てみることができます。 PHP – Matteo

+0

Mmm ... 'Doctrine \ Tests \ DBAL \ Mocks \ MockPlatform;だと思われますが、根拠がありません! -.- ' – Aerendir

+0

彼らはこれを[ここ](https://github.com/ramsey/uuid/issues/16#issuecomment-24575462)に言及していますが、どうやってそれが壊れたのか分かりません。 – mickadoo

答えて

0

モックで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); 
} 
関連する問題