讓我們來看看在psr/log
代碼,具體爲:的PHPUnit確保特質滿足接口
如你所知,一個特質無法實現一個接口,所以這兩個部分需要一個類才能成功連接在一起。
比方說,我介紹了性狀的測試(通過PHPUnit的getMockForTrait
相對簡單)。接下來要測試的是我想證明該特性滿足界面。
在代碼方面,它看起來很簡單:
public function testThatTraitSatisfiesInterface()
{
$className = 'test_class_' . uniqid();
$classCode = sprintf(
'class %s implements %s { use %s; }',
$className,
LoggerAwareInterface::class,
LoggerAwareTrait::class
);
eval($classCode); // ewww :see_no_evil:
new $className(); // no errors? good, test successful
}
一個有一些顧慮這裏:
- 我想避免
eval()
儘可能(即使我知道這是什麼驅動PHPUnit無論如何),但.. - 我寧願使用PHPUnit的功能,如果可能的話
所以最大的問題是,有沒有其他的選擇?
爲什麼這麼在意?一個類實現一個接口比它如何實現更重要。 – localheinz
這裏的重點不是課堂,而是特質。的確,我不關心課堂。 – Christian