Я пытаюсь протестировать класс, который управляет доступом к данным в базе данных (по сути, CRUD). Используемая нами библиотека БД имеет API, в котором вы сначала получаете объект таблицы статическим вызовом:
function getFoo($id) {
$MyTableRepresentation = DB_DataObject::factory("mytable");
$MyTableRepresentation->get($id);
... do some stuff
return $somedata
}
... вы поняли.
Мы пытаемся протестировать этот метод, но высмеиваем вещи DataObject, чтобы (а) нам не требовалось фактическое соединение с БД для теста, и (б) нам даже не нужно было включать библиотеку DB_DataObject для теста.
Однако в PHPUnit я не могу получить $ this-> getMock () для правильной установки статического вызова. У меня есть ...
$DB_DataObject = $this->getMock('DB_DataObject', array('factory'));
... но тест все равно говорит неизвестный метод "фабричный". Я знаю, что это создает объект, потому что прежде чем он сказал, что не может найти DB_DataObject. Теперь это возможно. Но нет способа?
Что я действительно хочу сделать, так это получить два фиктивных объекта, один для объекта таблицы. Таким образом, мне нужно не только указать, что фабрика является статическим вызовом, но и чтобы она возвращала какой-то заданный другой фиктивный объект, который я уже настроил.
В качестве предупреждения я должен упомянуть, что я делал это в SimpleTest некоторое время назад (не могу найти код), и он работал нормально.
Что дает?
[UPDATE]
Я начинаю понимать, что это как-то связано с ожидаемым ()