加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

用PHPUnit测试抽象类的方法

发布时间:2020-12-13 18:26:14 所属栏目:PHP教程 来源:网络整理
导读:我有一个抽象类,其中包含常用方法,我希望测试,所以我不必在扩展此类的每个类中继续测试它们. abstract class Class1 implements iClass1{ const VALUE = 'A'; private $Return; public function __construct($Field = NULL) { if( ! is_null($Field) ) $this
我有一个抽象类,其中包含常用方法,我希望测试,所以我不必在扩展此类的每个类中继续测试它们.
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对象,因为它是一个抽象类?

一种选择是创建一个
TestableClass1 extends Class1 {
     public function CalculateData() {}
}

并使用该类进行测试.

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

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

一个更简单的例子:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读