Вот что я сделал. Кажется, он работает очень хорошо. Я могу выполнить модульное тестирование своих моделей, и я выделил статические вызовы функций RedBean:
- Я создал тонкий класс обертки вокруг статических функций RedBean, которые я использую.
- Я передаю этот класс тонких оболочек каждому из моих классов моделей.
- Классы моделей используют эту тонкую обертку для данных CRUD RedBean.
- Единственное место со ссылкой на RedBean - это тонкая обертка.
- Во время моих модульных тестов я просто издевался над тонкой оберткой.
Вот несколько примеров тестового кода:
$db = M::mock('BeanDatabase');
$bean = M::mock('Bean');
$factory = M::mock('EntityFactory');
$term_bean = M::mock('Bean');
$term = M::mock('Term');
$db->shouldReceive('dispense')
->once()
->andReturn($bean);
$db->shouldReceive('find_all')
->once()
->with('term', 'WHERE termcategory_id = 5')
->andReturn(array($term_bean));
$factory->shouldReceive('create_entities_from_beans')
->once()
->with(array($term_bean))
->andReturn($term);
Это звучит как хорошее решение. У меня похожая ситуация, но я новичок в насмешках: что делает на самом деле издевательская тонкая оболочка - проверяет ли ее функции-члены, а затем возвращает жестко закодированные поддельные данные в область проверки? – djnz0feh
Я обновил свой ответ с помощью некоторых образцов тестового кода. –