我有一堆类常量,我想检查我的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动态地执行此操作。
答案 0 :(得分:2)
ClassName::$property
在property
上查找名为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,但代码更多。