检查 class 是否具有用 PHPUnit 定义的常量的正确方法

Correct way to check if a class has a constant defined with PHPUnit

我正在尝试找出最佳或正确的方法来检查 class 是否具有用 PHPUnit 定义的常量。 PHPUnit 文档似乎没有涵盖这一点,这让我想知道我是否通过测试做了正确的事情 - 然而它是我的 class.

的一个重要特性

我有以下 class:

PurchaseManager.php

/**
 * Message sent when a course has been purchased
 */
const COURSE_PURCHASED_MESSAGE = 'coursePurchasedMessage';

...它的一部分测试 class 有这个测试:

PurchaseManagerTest.php

public function testCoursePurchasedMessageConstant()
{
    $pm = new PurchaseManager();
    $this->assertTrue(defined(get_class($pm) . '::COURSE_PURCHASED_MESSAGE'));
}

这是正确的吗?它通过了,但我只是想知道这是否准确和最佳实践。

我正在使用 PHPUnit 5.0.8。

为此,我正在使用反射 class。它有 getConstants 方法,其中 returns 一个关联数组 [<constant_name> => <constant_value>, ...]

类似于:

public function testHasSiteExportedConstant()
{
    $mailer = new \ReflectionClass(SiteExporter::class);
    $this->assertArrayHasKey('SITE_EXPORTED', $mailer->getConstants());
}

我永远不会测试常量、属性或方法是否存在。当然,除非您正在测试代码生成器。