让我们看一下psr/log
中的代码,特别是:
如您所知,特征无法实现接口,因此这两个部分需要一个类才能成功连接在一起。
让我们说我对这个特性的测试(通过PHPUnit' s 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的原因),但是...... 所以最大的问题是,还有其他选择吗?
答案 0 :(得分:5)
如何将该类创建为测试资产:
{ "_id" : ObjectId("59629006d5idf90ed8013932"), "AssetNo" : "1", "location" : { "type" : "Point", "coordinates" : [ -79.33801, 35.31775 ] } }
然后断言它实现了接口:
namespace Foo\Bar\Test\Asset;
use Psr\Log;
final class LoggerAware implements Log\LoggerAwareInterface
{
use Log\LoggerAwareTrait;
}