4

クラスにPHPUnitで定義された定数があるかどうかを確認するための最良の、または正しい方法を見つけようとしています。PHPUnit のドキュメントはこれをカバーしていないようです。これをテストして正しいことを行っているかどうか疑問に思いますが、これは私のクラスの重要な機能です。

私は次のクラスを持っています:

PurchaseManager.php

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

...そしてそのテストクラスの一部には、このテストがあります:

PurchaseManagerTest.php

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

これは正しいです?それは合格ですが、これが正確でベストプラクティスであるかどうかを知りたいだけです。

PHPUnit 5.0.8 を使用しています。

4

2 に答える 2

9

この目的のためにReflectionクラスを使用しています。getConstants連想配列を返すメソッドがあります[<constant_name> => <constant_value>, ...]

何かのようなもの:

public function testHasSiteExportedConstant()
{
    $mailer = new \ReflectionClass(SiteExporter::class);
    $this->assertArrayHasKey('SITE_EXPORTED', $mailer->getConstants());
}
于 2016-09-02T07:19:58.943 に答える
5

定数、属性、またはメソッドの存在をテストすることはありません。もちろん、コードジェネレーターをテストしている場合を除きます。

于 2016-09-02T07:46:53.200 に答える