【问题标题】:Test methods of Abstract Class with PHPUnitPHPUnit抽象类的测试方法
【发布时间】:2012-03-29 18:49:37
【问题描述】:

我有一个包含通用方法的抽象类,我希望对其进行测试,因此我不必在扩展该类的每个类中继续测试它们。

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 和其他函数,然后我的其他测试文件可以测试抽象函数。

我希望能够测试 const 没有改变,字段抛出异常等...

测试:

class TEST_CLASS1 extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        require_once('CLASS1.php');
    }
    public function testConstants()
    {
        $this->assertEquals(CLASS1, 'A');
    }

    /* @expectedException CLASS1_EXCEPTION
    public function testLargeFieldException()
    {
        $class1 = new CLASS1('ABCD');
        $class1 = new CLASS1();
        $class1->SetField('ABCD');
    }
}

我无法创建 CLASS1 对象,因为它是一个抽象类,我该如何创建测试?

【问题讨论】:

标签: phpunit


【解决方案1】:

一种选择是创建一个

TestableClass1 extends Class1 {
     public function CalculateData() {}
}

并使用该类进行测试。

另一种选择是做几乎相同的事情,但使用 phpunit 为您提供的 API:

为此,请参阅phpunit documentation 的示例示例 10.13:测试抽象类的具体方法

一个更简单的例子:

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

【讨论】:

  • 感谢您的建议。我将尝试上面更大的代码示例,而不是尝试实现可测试类,以免它们不同步。
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2015-03-20
  • 2022-11-07
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多