首页 > 解决方案 > 测试需要扩展类才有意义的抽象 php-class 静态方法

问题描述

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

让我们假设以下结构:

现在我想在不使用基类的具体扩展的情况下测试getConstants 。我已经看到可以为抽象类实现获取模拟,但我还没有发现向模拟添加字段的可能性,这对于进行有意义且同时不依赖的测试来说是必要的在一个具体的扩展上。

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

标签: phpphpunit

解决方案


匿名类在这些测试中运行良好:

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());
    }
}

推荐阅读