Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Sylph: Большие Stub-ы для тестов от создателей PHPixie, либо как конвертировать массив в класс

Anna | 31.05.2014 | нет комментариев

Одной из самых надобных пророческой при написании юнит тестов является создание mock-ов и stub-ов для объектов которые применяются тестируемым классом. Тут стоит упомянуть о значимом различии: если «mock» является начальным объектом в котором замены одна либо несколько способов, то «stub» это некоторый фейк тот, что всецело заменяет начальный объект. в зависимости от сценария изредка гораздо легче сделать стаб чем сделать подходящий mock. В этой статья я покажу как результативно и стремительно создавать стабы применяя маленький класс Sylph от создателей фреймворка PHPixie.

Изредка случаются случаи когда тестируемый способ использует большие проперти объекта скажем:

class Fairy{

       public $name;
       protected $home_tree;

       public function __construct($name, $home_tree){
             $this->name = $name;
             $this->home_tree = $home_tree;        
       }

       // фея дружит со всеми зайками которые живут в ее лесе
       // и белками в ее дереве
       public function get_friends(){
            $friends = $this->home_tree->num_squirrels;
            $friends  = $this->home_tree->forest->num_animals('bunny'));
            return $friends;
       }

При написании теста для такого класса пришлось бы мокать классы Tree и Forest, объединять их друг с ином и передавать в конструктор. И все ради вызова одной функции.

Sylph разрешает сделать это гораздо проще, применяя примитивные ассоциированные массивы и неизвестные функции. В нашем случае мы могли бы описать $home_tree как:

$sylph = new PHPixieSylph();

$home_tree = $sylph->cast(array(
     'num_squirrels' => 5,
     'forest' => $sylph->cast(array(
                           'num_animals' => function($animal){
                                if($animal == 'bunny')
                                   return 4;

                                throw new Exception('Animal not found');
                           }
                     ))
));

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


$num_bunnies = 5;

$bunnies = $sylph->cast(array(
      'add' => function($new) use($num_bunnies){
                return $new   $num_bunnies;
       }
));

$bunnies->add(1); // 6
$bunnies->add(2); // 7

$num_bunnies = 2;

$bunnies->add(1); // 3
$bunnies->add(2); // 4

Как неизменно разработчики PHPixie усердствуют обнаружить самое примитивное решение задачи.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB