1

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

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

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

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

4

3 回答 3

0

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

我认为您必须模拟该对象。试试这些关于这个主题的帖子(这是一系列 4 个帖子)和这些幻灯片(来自幻灯片 #43)。

于 2011-01-06T02:30:38.957 回答
0

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

您可能需要跳过一些障碍才能将其连接到 PHPUnit,但可能有一些方法可以将其与其余测试集成。您只需将断言和预期致命错误的特殊情况分开即可。

于 2011-01-06T02:38:18.960 回答
-1

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

这在大多数语言中都很难测试。例如 java、c# 和 c++ 甚至不允许您编译此代码。所以它根本无法运行 D:

于 2011-01-06T02:21:18.027 回答