Тестирование фабричного метода stati c, который вызывает конструктор исключения - PullRequest
0 голосов
/ 28 марта 2020

У меня есть класс PHP, который использует фабричный метод stati c для создания экземпляра члена моего класса. Внутри этого метода я вызываю конструктор другого класса, который потенциально может вызвать исключение, которое я обрабатываю. Я хотел бы проверить этот метод stati c эффективно с PHPUnit. Вот некоторый псевдокод, описывающий мой поток.

class A {
   static function create() {
      $a = new A();
      try {
         $b = new B();   // could throw exception
      } catch(\Exception $e) {
         handle and return something else here;
      }
      $a->setB($b);
      return $a;
   }
}

Мне известно об использовании двойников теста с PHPUnit для создания заглушек метода на объекте, над которым я работаю. Однако я не знаю, как издеваться над самим конструктором, так как это был бы метод "magi c" для самого класса.

1 Ответ

0 голосов
/ 12 апреля 2020

Когда вы хотите создать макет из класса и ожидаете, что конкретный метод c сделает что-то для вас. это было бы что-то вроде этого

$this->getMockBuilder(B::class)
            ->disableOriginalConstructor()
            ->setMethods(['sth'])
            ->getMock();
$mock->expects($this->once())->method('sth')->withAnyParameters()->willThrowException(new \Exception());

Но я никогда не сталкивался с такой ситуацией, что мой код должен выдавать ошибку, когда я создаю новый экземпляр этого. И даже если у вас возникла такая ситуация, вы не должны издеваться над классом B, но вместо этого вы должны высмеивать код в конструкторе класса B, который выдает ошибку. Например, если у вас было соединение с PDO, вы должны сделать что-то насмешливое или, скажем, у вас есть curl_init, тогда вы должны смоделировать его.

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