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