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