测试需要扩展 classes 才有意义的抽象 php-class 静态方法
Testing abstract php-class static methods that need extending classes to be meaningful
我有一种情况,我不知道如何正确测试它。
让我们假设以下结构:
- MyAbstractBaseClass 有一个静态方法 getConstants returns 所有常量字段
MyAbstractBaseClass 没有任何此类字段。
- MyExtendingClass 扩展 MyAbstractBaseClass
现在我想测试 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());
}
}
我有一种情况,我不知道如何正确测试它。
让我们假设以下结构:
- MyAbstractBaseClass 有一个静态方法 getConstants returns 所有常量字段 MyAbstractBaseClass 没有任何此类字段。
- MyExtendingClass 扩展 MyAbstractBaseClass
现在我想测试 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());
}
}