我正在测试setSubject方法,如果它缺少,则设置为(空主题).
如果尝试访问未声明的属性,Zend_Mail会抛出异常(例如,电子邮件主题丢失,最好抛出一些例外).更多信息: http://framework.zend.com/issues/browse/ZF-11371
这是我需要使用才能成功测试它:
如果尝试访问未声明的属性,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)'; } }
测试失败并显示消息:
There was 1 error:
1) Email_ParseTest::testNoSubject
InvalidArgumentException: subject is required
它抱怨$this->主题未设置(或类似).
更多信息:
> PHP 5.4.8
> Zend Framework 1.9.5
> PHPUnit 3.6.12
> subject被定义为空字符串(“”)
我已经“手动”测试了第二种方法,它按预期工作(主题在catch块中设置).我对PHPUnit没有多少经验,所以这可能很容易就是E_PEBKAC.
除非我误解你的问题,否则你试图测试受保护的方法……你不能这样做.假设通过测试使用它们的公共方法来测试受保护和私有方法.
原文链接:/php/136605.html如果您将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(...)); ... }