热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHPUnit确保特征满足接口

如何解决《PHPUnit确保特征满足接口》经验,为你挑选了1个好方法。

让我们psr/log特别看一下中的代码:

LoggerAwareTrait

LoggerAwareInterface

如您所知,特征无法实现接口,因此这两部分需要一个类才能成功连接在一起。

假设我涵盖了特性测试(通过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的功能

因此,最大的问题是,还有其他选择吗?



1> localheinz..:

仅将类创建为测试资产怎么样:

namespace Foo\Bar\Test\Asset;

use Psr\Log;

final class LoggerAware implements Log\LoggerAwareInterface
{
    use Log\LoggerAwareTrait;
}

然后断言它实现了接口:

namespace Foo\Bar\Test;

use PhpUnit\Framework;
use Psr\Log;

final class LoggerAwareTest extends Framework\TestCase
{
    public function testImplementsLoggerAwareInterface()
    {
        $loggerAware = new Asset\LoggerAware();

        $this->assertInstanceOf(Log\LoggerAwareInterface::class, $loggerAware);
    }
}


推荐阅读
author-avatar
淡而有味调_740
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有