2016-10-06 39 views
0

如所述here可以創建自定義Type s。如何測試原理自定義類型

我已經做了,但現在我想測試這個班,但不幸的是這是不可能的。

事實上,自定義類型擴展了類似於無法實例化的類Doctrine\DBAL\Types\Type

逸岸,它的構造是建立這樣:

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

正如評論說,它需要使用的工廠方法來實例化類,但是,這是什麼工廠方法是什麼?我在哪裏可以找到它?

+0

你可以看看在DBAL測試套件,如例看到這個測試https://github.com/doctrine/dbal/blob/master/tests/Doctrine/Tests/DBAL/Types/DecimalTest。 php – Matteo

+0

嗯...看來'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); 
} 
相關問題