测试需要扩展 classes 才有意义的抽象 php-class 静态方法

Testing abstract php-class static methods that need extending classes to be meaningful

我有一种情况,我不知道如何正确测试它。

让我们假设以下结构:

现在我想测试 getConstants,而不使用基础 class 的具体扩展。 我已经看到可以为 abstract-class 实现获取模拟,但我还没有找到向模拟添加字段的可能性,这对于进行有意义的测试是很有必要的,同时不依赖具体的扩展。

所以我的问题是:我怎样才能做到这一点?

Anonymous 类 非常适合此类测试:

final class MyAbstractBaseClassTest extends TestCase
{
    /**
     * @test
     */
    public function it_should_return_all_constants()
    {
        $subject = new class extends MyAbstractBaseClass {
            const SOME_CONSTANT = 'SOME VALUE';
            const ANOTHER_CONSTANT = 'ANOTHER VALUE';
        };

        self::assertEqualsCanonicalizing(['SOME_CONSTANT', 'ANOTHER_CONSTANT'], $subject::getConstants());
    }

    /**
     * @test
     */
    public function it_should_return_an_empty_list_when_there_are_no_constants()
    {
        $subject = new class extends MyAbstractBaseClass {};

        self::assertEquals([], $subject::getConstants());
    }
}