使用PHPUnit 5.5.4

时间:2016-10-06 07:47:48

标签: php unit-testing testing phpunit php-7

我有一堆类常量,我想检查我的PHPUnit测试中的值。

当我运行此测试时,我收到以下错误:

  

1)CRMPiccoBundle \ Tests \ Services \ MailerTest :: testConstantValues with   数据集"帐户验证" (' ACCOUNT_VERIFICATION&#39 ;,   ' CRMPicco.co.uk帐户验证')错误:访问未声明的内容   static属性:CRMPiccoBundle \ Services \ Mailer :: $ constant

这是我的测试及其相应的dataProvider:

/**
 * @dataProvider constantValueDataProvider
 */
public function testConstantValues(string $constant, $expectedValue)
{
    $mailer = new Mailer();
    $this->assertEquals($expectedValue, $mailer::$constant);
}

public function constantValueDataProvider()
{
    return [
        'Account Verification' => [
            'ACCOUNT_VERIFICATION',
            'CRMPicco.co.uk Account Email Verification'
        ]];
}

这是在Mailer

中声明常量的方式
const ACCOUNT_VERIFICATION = 'CRMPicco.co.uk Account Email Verification';

如何查看此常量的值?

如果我在测试中做$mailer::ACCOUNT_VERIFICATION它会吐出预期的值,但我想用dataProvider动态地执行此操作。

1 个答案:

答案 0 :(得分:2)

ClassName::$propertyproperty上查找名为ClassName的静态属性,而不是名称存储在$property中的常量。 PHP没有查找由字符串变量命名的常量的语法;您需要将类引用与constant()函数结合使用。

例如:

/**
 * @dataProvider constantValueDataProvider
 */
public function testConstantValues(string $constant, $expectedValue)
{
    $classWithConstant = sprintf('%s::%s', Mailer::class, $constant);
    $this->assertEquals($expectedValue, constant($classWithConstant));
}

这也适用于reflection,但代码更多。