Как бы вы протестировали этот тип функции? - PullRequest
0 голосов
/ 19 марта 2019

Как бы вы протестировали этот тип функции?

public function import(int $id, array $fields, string $data) {
   try {
     $file = $this->writeTemporaryFile(string $data);

      if (!$this->getStorage()->ping()) {
          throw new \Exception('Unable ping storage');
      }

      $result = $this->getStorage()->importFromFile($fields, $file);

      if (!$result) {
         throw new \Exception('Unable to write to storage');
      }

      $this->getAnotherStorage()->ok($id);
      return true;
   } catch (\Throwable $e) {
      $this->log($e);
      $this->failsafe($data);
      return false;
   }
}

У меня есть фиктивные объекты и заглушки для объектов, возвращаемых $this->getStorage() и $this->getAnotherStorage(). Есть заглушки для $this->getStorage()->ping() и $this->getAnotherStorage()->ok() и т. Д.

Итак, вопросы:

а) На какие моменты вы обращаете внимание? Будете ли вы проверять возможные исключения для всех методов или просто будете проверять результат самого метода import?

б) Как вы организуете код вашего юнит-теста? Большой толстый одиночный метод ...

public function testImport(): void {
    //here goes a big fat testing method
}

или один метод, вызывающий защищенные методы, по одному на каждый случай?

public function testImport(): void {
   $this->examineWritingToFile();
   $this->examineFailedPing();
   $this->examineSavingToStorageFromFile();
   //etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...