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中的一个障碍,因为它们很难被模拟.
这是Mchl答案的完整代码片段,因此人们不必浏览文档......
public function testCannotInstantiateExternally()
{
$reflection = new \ReflectionClass('\My\Namespace\MyClassName');
$constructor = $reflection->getConstructor();
$this->assertFalse($constructor->isPublic());
}
Run Code Online (Sandbox Code Playgroud)