Предположим, у меня есть класс с частной собственностью и связанным публичным геттером и сеттером.Я хочу проверить с помощью 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);
Будет выведено:
string (6) "gerald"
string (6) "gerald"
Есть ли какой-нибудь способ, которым я могу получить доступ к закрытым свойствам из PHPUnit, чтобы я мог писать тесты, которые удостоверяются, что свойства, которые, на мой взгляд, получают и устанавливают, действительно получают и устанавливают?
Или есть что-то еще, что я должен сделать в тесте, чтобы поймать подобные проблемы, не пытаясь получить доступ к закрытому состоянию тестируемого объекта?