【发布时间】:2012-11-21 08:48:53
【问题描述】:
我正在测试 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)';
}
}
测试失败并显示消息:
有 1 个错误:
1) Email_ParseTest::testNoSubject InvalidArgumentException:主题是必需的
它抱怨 $this->subject 没有设置(或类似的)。
更多信息:
- PHP 5.4.8
- Zend 框架 1.9.5
- PHPUnit 3.6.12
-
subject定义为空字符串 ("")
我已经“手动”测试了第二种方法,它按预期工作(主题设置在 catch 块中)。我对 PHPUnit 没有太多经验,所以这可能很容易成为 E_PEBKAC。
【问题讨论】:
-
你可以试试 var_dump("foo");在 catch 块中查看控制是否进入 catch 块?如果没有,它很可能不会捕获正确的异常。
标签: php zend-framework object phpunit try-catch