【发布时间】:2017-12-13 13:44:25
【问题描述】:
我们看一下psr/log中的代码,特别是:
众所周知,trait 不能实现接口,所以这两个部分需要一个类才能成功连接在一起。
假设我介绍了 trait 的测试(通过 PHPUnit 的 getMockForTrait 相对容易)。接下来要测试的是我想证明 trait 满足接口。
在代码方面,看起来很简单:
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
}
A 有一些顾虑:
- 我想尽可能避免
eval()(即使我知道它是驱动 PHPUnit 的原因),但是.. - 如果可能的话,我宁愿使用 PHPUnit 的功能
所以最大的问题是,还有其他选择吗?
【问题讨论】:
-
你为什么在乎?类实现接口比实现接口的方式更重要。
-
这里的重点不是class,而是trait。确实,我不在乎课程。
标签: php testing interface phpunit traits