gpt4 book ai didi

PHPUnit:对非公共(public)变量进行断言

转载 作者:IT王子 更新时间:2023-10-28 23:44:49 25 4
gpt4 key购买 nike

假设我有一个具有私有(private)属性和关联的公共(public) getter 和 setter 的类。我想用 PHPUnit 测试属性在使用 setter 后获得正确的值,或者 getter 返回正确的属性。

当然,我可以通过使用 getter 来测试 setter 以查看对象是否存储了正确的值,反之亦然以测试 getter。但是,这并不能保证私有(private)属性就是被设置的那个。

假设我有以下类(class)。我创建了一个属性、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() 时,它实际上在类中创建了一个新属性,其名称我认为是我的私有(private)属性,只有 setter 创建的那个是公共(public)的!我可以用以下代码证明这一点:

$a  = new SomeClass;

$a -> setName('gerald');
var_dump ($a -> getName ());
var_dump ($a -> name);

它会输出:

string(6) "gerald"

string(6) "gerald"

有什么方法可以让我从 PHPUnit 访问私有(private)属性,这样我就可以编写测试来确保我认为正在获取和设置的属性实际上确实正在获取和设置?

或者我应该在测试中做一些其他的事情来捕获这样的问题而不试图访问被测对象的私有(private)状态?

最佳答案

您也可以使用 Assert::assertAttributeEquals('value', 'propertyName', $object)

https://github.com/sebastianbergmann/phpunit/blob/3.7/PHPUnit/Framework/Assert.php#L490

关于PHPUnit:对非公共(public)变量进行断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928905/

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