在catch块中设置对象属性时,PHPUnit测试失败
发布时间:2020-12-13 13:10:52 所属栏目:PHP教程 来源:网络整理
导读:我正在测试setSubject方法,如果它缺少,则设置为(空主题). 如果尝试访问未声明的属性,Zend_Mail会抛出异常(例如,电子邮件主题丢失,最好抛出一些例外).更多信息: http://framework.zend.com/issues/browse/ZF-11371 这是我需要使用才能成功测试它: 类 protec
我正在测试setSubject方法,如果它缺少,则设置为(空主题).
如果尝试访问未声明的属性,Zend_Mail会抛出异常(例如,电子邮件主题丢失,最好抛出一些例外).更多信息: http://framework.zend.com/issues/browse/ZF-11371 这是我需要使用才能成功测试它: 类 protected function setSubject() { # catch exception thrown if non existing $this->message object property is accessed try { $this->subject = $this->defunctTheContent($this->message->getHeaders(),$this->message->subject); } catch (Zend_Mail_Exception $e) { } if( ! $this->subject) $this->subject = '(empty subject)'; } 测试 public function testNoSubject() { $email = new parseEmail(file_get_contents('mail.x')); $this->AssertEquals('(empty subject)',$email->subject); } 但是,如果我尝试使用此代码,您可以看到catch块为空… protected function setSubject() { try { $this->subject = $this->defunctTheContent($this->message->getHeaders(),$this->message->subject); } catch (Zend_Mail_Exception $e) { $this->subject = '(empty subject)'; } } 测试失败并显示消息:
它抱怨$this->主题未设置(或类似). 更多信息: > PHP 5.4.8 我已经“手动”测试了第二种方法,它按预期工作(主题在catch块中设置).我对PHPUnit没有多少经验,所以这可能很容易就是E_PEBKAC.
除非我误解你的问题,否则你试图测试受保护的方法……你不能这样做.假设通过测试使用它们的公共方法来测试受保护和私有方法.
如果您将PHP 5.3.2与PHPUnit一起使用,则可以在运行测试之前使用反射将它们设置为公共,从而直接测试私有和受保护的方法,但是,正如我所提到的,您可能需要测试公共方法. 但是如果你想使用反射,这是一个通用的例子: protected static function getMethod($name) { $class = new ReflectionClass('MyClass'); $method = $class->getMethod($name); $method->setAccessible(true); return $method; } public function testFoo() { $foo = self::getMethod('foo'); $obj = new MyClass(); $foo->invokeArgs($obj,array(...)); ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |