假设我有一个具有私有属性和关联的公共 getter 和 setter 的类。我想用 PHPUnit 测试该属性在使用 setter 后是否获得正确的值,或者 getter 返回正确的属性。
当然,我可以通过使用 getter 来测试 setter,以查看对象是否存储了正确的值,反之亦然以测试 getter。但是,这并不能保证私有属性就是正在设置的属性。
假设我有以下课程。我创建了一个属性,getter 和 setter。但是我在属性名称中打错了字,所以 getter 和 setter 实际上并没有操纵它们要操纵的属性
class SomeClass
{
private
$mane = NULL; // Was supposed to be $name but got fat-fingered!
public function getName ()
{
return ($this -> name);
}
public function setName ($newName)
{
$this -> name = $newName;
return ($this);
}
}
如果我运行以下测试
public function testSetName ()
{
$this -> object -> setName ('Gerald');
$this -> assertTrue ($this -> object -> getName () == 'Gerald');
}
我会得到一个通行证。但是,实际上发生了我不希望的非常糟糕的事情。当调用 setName() 时,它实际上在类中创建了一个新属性,其名称我认为我的私有属性具有,只有 setter 创建的那个是公共的!我可以用以下代码证明这一点:
$a = new SomeClass;
$a -> setName('gerald');
var_dump ($a -> getName ());
var_dump ($a -> name);
它会输出:
字符串(6)“杰拉德”
字符串(6)“杰拉德”
有什么方法可以从 PHPUnit 访问私有属性,这样我就可以编写测试来确保我认为正在获取和设置的属性实际上正在被获取和设置?
或者我应该在测试中做些什么来捕捉这样的问题而不试图访问被测对象的私有状态?