【发布时间】:2011-02-19 08:33:35
【问题描述】:
我正在测试一些扩展默认 php 异常对象的遗留代码。此代码打印出自定义 HTML 错误消息。
我想模拟这个异常对象,当测试代码生成异常时,它只会回显基本消息,而不是给我整个 HTML 消息。
我想不出办法来做到这一点。似乎您可以测试显式异常,但不能以一般方式更改异常的行为,也不能模拟扩展默认 php 功能的对象。 (除了例外,想不出另一个例子……但似乎是这样)
我想问题是,你会将模拟对象附加到哪里?看起来你不能干涉'throw new',这是调用对象方法的地方......
或者,如果您可以以某种方式使用现有的 phpunit 异常功能以您想要的方式更改异常行为,以您所有代码的通用方式...但这似乎是 hacky 和糟糕的......
编辑:这里有一些代码可以让事情更清楚:
class FooTest extends PHPUnit_Framework_TestCase{
public function testBar(){
include '/path/to/file.php'; //generates exception
$this->assertTrue($baz);
}
}
...
//overridden exception class
class Foo_Exception extends ErrorException{
...
所以,我的问题是,有没有办法处理这个被覆盖的类,而不是根据具体情况进行处理?如果我不测试异常的行为,只测试导致异常的代码怎么办?
【问题讨论】:
-
好吧,我现在有点糊涂了。包含中的异常没有被捕获,然后我的第一个答案成立,或者它被捕获并且我的第二个答案成立。与它无关的异常类型。
-
你是对的...我对 ob_start 将如何处理事情感到困惑...但是...您的解决方案确实可以抑制错误消息,但这也意味着它会处理所有输出同样......我想我是在询问一个更具体的解决方案来处理异常类本身......但现在我一直认为这似乎不可行......或者不一定是可取的。 ..我想处理对象行为的最佳情况是为每种情况引发异常。有时,只有当你问一个模糊的问题时,事情才有意义....
标签: php unit-testing exception mocking phpunit