2013-03-21 2 views
2

Я как бы новичок в тестировании, и я хотел бы понять, как тестирование реализовано в реальном мире. Например, существует этот код, который реализует внутреннюю структуру и использует цепочку методов. На первый взгляд я предполагал, насмешливый бы лучший путь, но большинство примеров идут так:Смещение объекта с внутренними зависимостями в PHPUnit

public function someFunction(A $a) 
{ 
    return $a*b; 
} 

Однако код я тестирование проходит так:

public function deleteUser($user_id) { 
      $user_id= (int)$user_id; 

      $flag = Framework::getInstance()->request->get('delete') || false; 

      if(!$this->exists($user_id)) { 
       throw new UserException(UserException::NOT_EXIST); 
      } 

      return $this->delete(array('id' => $user_id)); 
     } 

Как бы вы проверить Это? Я посмотрел на [1]: Тестирование объектов с зависимостями в PHPUnit

Testing objects with dependencies in PHPUnit

Но его изменения фактического кода не вариант.

ответ

2

Короткий ответ: вы не можете выполнить проверку этого кода. Код слишком связан с классом Framework из-за вызова статического метода, поэтому вы не можете протестировать метод deleteUser() () в изоляции. This article о тестировании кода, который использует Singletons, довольно хорошо описывает ситуацию.

Долгий ответ заключается в том, что вы не можете тестировать этот код, но вы можете создавать тесты, которые полезны, например, тесты интеграции или функциональные тесты. Вы можете использовать this question в качестве справочного материала, но в основном, в тесте интеграции вы одновременно тестируете несколько частей вашего кода. В этом типе тестов вы можете проверить ожидаемое поведение этого метода, а именно, что пользователь удаляется, не беспокоясь о зависимостях вашего класса. Вы хотите протестировать оба класса (класс под тестом и класс Framework), работая вместе, поэтому вам не нужно ничего издеваться.

Сказав это, почему вы не можете просто изменить код? Я настоятельно рекомендую вставлять зависимости в ваш код (как сказано в первой статье) вместо использования синглета.

+0

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

+0

Вы можете попробовать другие виды тестирования, такие как интеграционные тесты или функциональные тесты. Но да: модульное тестирование невозможно. Если ответ был полезен, пожалуйста, не забудьте принять его! :) – fiunchinho

+0

Хорошо, спасибо, я сделаю это. –

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