首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试调用异常抛出构造函数的静态工厂方法

问测试调用异常抛出构造函数的静态工厂方法
EN

Stack Overflow用户
提问于 2020-03-28 06:33:11
回答 1查看 196关注 0票数 0

我有一个PHP类,它使用静态工厂方法来实例化我的类的一个成员。在这个方法中,我调用了另一个类的构造函数,这个构造函数可能会抛出一个异常,由我来处理。我想用PHPUnit有效地测试这个静态方法。下面是描述我的流程的一些伪代码。

代码语言:javascript
复制
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的test doubles在我正在模拟的对象上创建方法存根。但是,我不知道如何模拟构造函数本身,因为这将是类本身的一个“魔术”方法。

EN

回答 1

Stack Overflow用户

发布于 2020-04-13 02:42:02

当你想要从一个类创建一个mock,并期望一个特定的方法时,可以为你做一些事情。应该是这样的

代码语言:javascript
复制
$this->getMockBuilder(B::class)
            ->disableOriginalConstructor()
            ->setMethods(['sth'])
            ->getMock();
$mock->expects($this->once())->method('sth')->withAnyParameters()->willThrowException(new \Exception());

但是我从来没有遇到过这种情况,当我创建一个新的实例时,我的代码会抛出一个错误。即使你遇到了这种情况,你也不应该模仿B类,而应该模仿B类的构造函数中抛出错误的代码。例如,如果你有一个PDO连接,那么你应该做一些关于模拟它的事情,或者假设你有curl_init,那么你应该模拟它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60894976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档