用PHPUnit测试抽象类的方法

用PHPUnit测试抽象类的方法,phpunit,Phpunit,我有一个抽象类,其中有一些常用的方法,我希望对其进行测试,所以我不必在扩展这个类的每个类中都测试它们 abstract class Class1 implements iClass1 { const VALUE = 'A'; private $Return; public function __construct($Field = NULL) { if( ! is_null($Field) ) $this->S

我有一个抽象类,其中有一些常用的方法,我希望对其进行测试,所以我不必在扩展这个类的每个类中都测试它们

abstract class Class1 implements iClass1
{
    const VALUE = 'A';
    private $Return;    
    public function __construct($Field = NULL)
    {
        if( ! is_null($Field) )
            $this->SetField($Field);
    }
    public function GetField()
    {
        return $this->Return;
    }
    public function SetField($Field)
    {
        if (strlen($Field) != 3)
        throw new CLASS1_EXCEPTION('Field "' . $Field . '" must be 3 digits.');

    $this->Return = $FieldCode;
    }
    abstract function CalculateData();
}
我想创建一个基本的测试用例来测试构造函数、GetField和其他函数,然后我的其他测试文件可以测试抽象函数

我想能够测试常量没有改变,字段抛出异常等

测试:


由于CLASS1对象是抽象类,因此无法创建它,因此如何创建测试?

一个选项是创建

TestableClass1 extends Class1 {
     public function CalculateData() {}
}
并使用该类进行测试

另一个选项是执行大致相同的操作,但使用API phpunit提供给您:

有关这一点,请参见示例10.13:测试抽象类的具体方法:

一个简单的例子:
谢谢你的建议。我将尝试上面更大的代码示例,而不尝试实现可测试类,因为担心它们不同步
TestableClass1 extends Class1 {
     public function CalculateData() {}
}
abstract class AbstractClass
{
    public function concreteMethod()
    {
        return 5;
    }

    public abstract function abstractMethod();
}

class AbstractClassTest extends PHPUnit_Framework_TestCase
{
    public function testConcreteMethod()
    {
        $sut = $this->getMockForAbstractClass('AbstractClass');
        $this->assertSame(5, $sut->concreteMethod());
    }
}