让我们来看看在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