首页 / PHP / 没有用phpUnit测试异常?
没有用phpUnit测试异常?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了没有用phpUnit测试异常?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1941字,纯文字阅读大概需要3分钟。
内容图文
![没有用phpUnit测试异常?](/upload/InfoBanner/zyjiaocheng/671/1e443a70513f4fcca83863aeabac55eb.jpg)
我正在用phpUnit编写一些单元测试来测试Zend Framework应用程序,并且在changePassword函数中测试异常时遇到了一些问题.测试不会失败,但是会在生成html的覆盖率工具中“抛出新的异常($tr-> translate(‘userOldPasswordIncorrect’));”线未测试.
public function changePassword(array $data, $id)
{
$user = $this->_em->find('Entities\User', (int) $id);
$oldPassword = sha1(self::$_salt . $data['oldPassword']);
if ($user->getPassword() !== $oldPassword) {
$tr = PC_Translate_MySQL::getInstance();
throw new Exception($tr->translate('userOldPasswordIncorrect'));
}
$user->setPassword(sha1(self::$_salt . $data['password']));
$this->_em->persist($user);
$this->_em->flush();
}
应该测试异常的单元测试:
/**
* @depends testFindByAuth
* @expectedException Exception
*/
public function testChangePasswordWrongOldPassword()
{
$this->_dummyUser = $this->_user->findByAuth($this->_dummyEmail, $this->_dummyPassword, $this->_reseller);
// Try to change the password with a wrong oldPassword
$data['oldPassword'] = 'wrongOldPassword';
$data['password'] = $this->_dummyNewPassword;
$this->_user->changePassword($data, $this->_dummyUser->getId());
}
我希望有人能告诉我我做错了什么.
更新资料
问题出在PC_Translate_MySQL :: getInstance()方法内部.有一个例外.当我正在测试是否获得一般例外时,这当然通过了.解决方案不要在changePassword方法中使用一般的Exception.
解决方法:
我猜?从PC_Translate_MySQL :: getInstance()引发了异常.
这就是使用单个Exception的麻烦.这使得检查抛出什么异常变得更加困难.我建议更改changePassword方法以引发其他异常.可能是InvalidArgumentException或RuntimeException.然后测试那个.
出于这个原因,我个人一直使用自定义异常.
try {
} catch (DatabaseQueryException $e) {
// Handle database error
} catch (DatabaseConnectionException $e) {
// We never even connected...
} catch (InvalidArgumentException $e) {
//...
}
通常,出于这个原因,我永远不要使用catch(Exception $e).您永远不知道自己捕获了什么异常. (我确实定义了一个自定义的异常处理程序,因此,如果应用程序未捕获,则不会致命.而是显示500错误并记录异常).
内容总结
以上是互联网集市为您收集整理的没有用phpUnit测试异常?全部内容,希望文章能够帮你解决没有用phpUnit测试异常?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。