如何在php中使用simpletest来预测致命错误

时间:2011-01-06 02:14:29

标签: php simpletest

我正在尝试编写测试用例以确保无法实例化Singleton类。 Singleton的构造函数被定义为private,因此我的测试如下:

$this->expectError();
$test = new TestSingletonClassA();

而不是捕获错误并通过测试,我得到'PHP致命错误:调用私有Singleton :: __ construct()'。我也尝试将PatternExpectation作为参数传递给expectError,但这也不起作用。你有什么建议吗?

一些背景:php5.3,simpletest1.1a

3 个答案:

答案 0 :(得分:0)

如果你的php代码抛出致命错误,它将永远不会到达phpunit,所以你必须编写“正确”的代码才能测试它。如果你调用一个私有方法,它会抛出异常,所以它不会到达phpunit。你必须改变它。

我认为你必须嘲笑这个对象。请尝试these posts关于此主题(这是一系列的4个帖子)和these slides(来自幻灯片#43)。

答案 1 :(得分:0)

单元测试框架无法捕捉到这样的东西。但您可以使用PHPT和类似的回归测试框架。

你可能不得不跳过一些箍将它挂钩到PHPUnit,但是可能有办法将它与其余的测试集成。你只需要将断言和你期望致命错误的特殊情况分开。

答案 2 :(得分:-1)

我认为不可能这样做..致命的错误是不可捕捉的,因为我已经明白了。您可以使用反射来获取构造函数方法,然后确保它具有访问修饰符“private”。

这在大多数语言中很难测试。例如java,c#和c ++甚至不允许你编译这段代码。因此它永远不会在所有D中运行: