PHPUnit:对非公共变量执行断言
假设我有一个具有私有属性和关联的公共 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访问私有属性,这样我就可以编写测试,以确保我认为正在获取和设置的属性实际上确实正在获取和设置?
或者我应该在测试中做一些其他事情来捕获这样的问题,而无需尝试访问被测对象的私有状态?