Заинтересован в модульном тестировании со статической структурой, похожей на FuelPHP, но не уверен, с чего начать - PullRequest
0 голосов
/ 01 декабря 2011

Как видно из названия, я пытаюсь понять, как выполнить модульное тестирование (или, возможно, какой-либо другой вид тестирования) каркас, построенный аналогично FuelPHP, где вы используете статические вызовы для установки и доступа ко всему.

Это приводит к следующему коду:

class Appointment {
  public static function updateStartTime($binds) {
     $query = "UPDATE appointment SET start_time = :start_time 
       WHERE appointment_id = :appointment_id";
     return DB::update($query, $binds);
  }
}

И в итоге получается код контроллера, который выглядит следующим образом:

$result = Appointment::updateStartTime(array(
  'start_time' => '10:00 am', 
  'appointment_id' => 10
));

Итак, чтобы протестировать метод Appointment :: updateStartTime, мне нужнобыть в состоянии предоставить ему поддельный метод DB :: update, но я не уверен, с чего начать.

Я знаю, что мог бы просто включить фиктивный класс как часть набора тестов:

class DB {
  public static function update($params) { return 'success'; }
}

Но это кажется утомительным.Есть ли лучший способ добавить тестовое покрытие в мою среду, при этом все еще используя этот стиль кодирования?

1 Ответ

2 голосов
/ 01 декабря 2011

Статические методы - смерть от проверяемости . PHPUnit предлагает некоторые макеты для статических функций класса, но это работает только при определенных условиях (возможно только в самих классах, классы должны использовать позднее статическое связывание, см. Методы Stubbing и Mocking ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...