PHP单元测试:是否可以测试致命错误?

Ste*_*hen 11 php singleton unit-testing simpletest fatal-error

FWIW我正在使用SimpleTest 1.1alpha.

我有一个单例类,我想编写一个单元测试,通过尝试实例化类(它有一个私有构造函数)来保证该类是一个单例.

这显然会导致致命错误:

致命错误:调用私有FrontController :: __ construct()

有没有办法"捕获"致命错误并报告通过的测试?

Mch*_*chl 12

不会.致命错误会停止执行脚本.

并没有必要以这种方式测试单身人士.如果你坚持检查构造函数是否是私有的,你可以使用ReflectionClass:getConstructor()

public function testCannotInstantiateExternally()
{
    $reflection = new \ReflectionClass('\My\Namespace\MyClassName');
    $constructor = $reflection->getConstructor();
    $this->assertFalse($constructor->isPublic());
}
Run Code Online (Sandbox Code Playgroud)

另一件需要考虑的事情是,Singleton类/对象是TTD中的一个障碍,因为它们很难被模拟.


Pre*_*ays 5

这是Mchl答案的完整代码片段,因此人们不必浏览文档......

public function testCannotInstantiateExternally()
{
    $reflection = new \ReflectionClass('\My\Namespace\MyClassName');
    $constructor = $reflection->getConstructor();
    $this->assertFalse($constructor->isPublic());
}
Run Code Online (Sandbox Code Playgroud)