2014-01-31 5 views
1

Я только начинаю использовать RedBean для небольшого проекта веб-страницы PHP. Я строю модульные тесты для каждого из моих классов. Я не уверен, как издеваться над RedBean в моих модульных тестах.Как издеваться над RedBean для модульного тестирования

Вопрос: Как я могу высмеять классы RedBean для поддержки модульного тестирования?

ответ

1

Вот что я сделал. Кажется, он работает очень хорошо. Я могу выполнить модульное тестирование своих моделей, и я выделил статические вызовы функций RedBean:

  1. Я создал тонкий класс обертки вокруг статических функций RedBean, которые я использую.
  2. Я передаю этот класс тонких оболочек каждому из моих классов моделей.
  3. Классы моделей используют эту тонкую обертку для данных CRUD RedBean.
  4. Единственное место со ссылкой на RedBean - это тонкая обертка.
  5. Во время моих модульных тестов я просто издевался над тонкой оберткой.

Вот несколько примеров тестового кода:

$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); 
+0

Это звучит как хорошее решение. У меня похожая ситуация, но я новичок в насмешках: что делает на самом деле издевательская тонкая оболочка - проверяет ли ее функции-члены, а затем возвращает жестко закодированные поддельные данные в область проверки? – djnz0feh

+0

Я обновил свой ответ с помощью некоторых образцов тестового кода. –

Смежные вопросы