gpt4 book ai didi

phpunit - 用PHPUnit测试抽象类的方法

转载 作者:行者123 更新时间:2023-12-04 09:41:58 26 4
gpt4 key购买 nike

我有一个包含通用方法的抽象类,我想测试它,所以我不必在扩展这个类的每个类中继续测试它们。

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

并使用该类进行测试。

另一种选择是执行几乎相同的操作,但使用 phpunit 为您提供的 API:

为此,请参见示例 例 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());
}
}

关于phpunit - 用PHPUnit测试抽象类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com