Предположим, у меня есть класс с частным свойством и связанным общедоступным средством получения и установки. Я хочу проверить с помощью PHPUnit, что свойство получает правильное значение после использования установщика или что получатель возвращает правильное свойство.
Конечно, я могу протестировать установщик, используя геттер, чтобы увидеть, что объект хранит правильное значение, и наоборот, для тестирования геттера. Однако это не гарантирует, что устанавливается частное свойство.
Допустим, у меня был следующий класс. Я создал свойство, геттер и сеттер.Но я допустил опечатку в имени свойства, поэтому геттер и сеттер на самом деле не манипулируют тем свойством, которым они должны управлять
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 (), он фактически создает новое свойство в классе с именем, которое, как я думал, было у моего частного свойства, только то, которое создает установщик, является общедоступным! Я могу продемонстрировать это с помощью следующего кода:
$a = new SomeClass;
$a -> setName('gerald');
var_dump ($a -> getName ());
var_dump ($a -> name);
Он выведет:
строка (6) «gerald»
строка (6) «gerald»
Есть ли способ получить доступ к частным свойствам из PHPUnit, чтобы я мог писать тесты, чтобы убедиться, что свойства, которые, как мне кажется, получаются и устанавливаются, действительно действительно получаются и устанавливаются?
Или есть что-то еще, что я должен сделать в тесте, чтобы выявить подобные проблемы, не пытаясь получить доступ к частному состоянию тестируемого объекта?