我想测试我编写的自定义错误处理类,但这本身就存在一些问题。
首先,由于在测试中设置自定义error_handler会覆盖PHPUnit的error_handling,因此每次更改为自定义实现并进行测试时,必须调用restore_error_handler(),以便后续的测试可以使用phpunits error_handling。虽然我承认没有尝试过,也许PHPUnit会在每个测试之后重置自己,但我有点怀疑。
我有各种配置要测试,在不同条件下,即E_ERROR,E_WARNING等。
然后我想到了模拟error_handler,但我对测试的模拟方面仍然很陌生。通过快速的谷歌搜索,我发现了一个类似的方法,这里是修改后并以一种可能适合我的需要的方式实施的想法...
首先,由于在测试中设置自定义error_handler会覆盖PHPUnit的error_handling,因此每次更改为自定义实现并进行测试时,必须调用restore_error_handler(),以便后续的测试可以使用phpunits error_handling。虽然我承认没有尝试过,也许PHPUnit会在每个测试之后重置自己,但我有点怀疑。
我有各种配置要测试,在不同条件下,即E_ERROR,E_WARNING等。
然后我想到了模拟error_handler,但我对测试的模拟方面仍然很陌生。通过快速的谷歌搜索,我发现了一个类似的方法,这里是修改后并以一种可能适合我的需要的方式实施的想法...
//Create mock with error_handler method
$errorH = $this->getMock ('ErrorHandler', array ('error_handler'));
// error handler should be called at least once
$errorH->expects ($this->atLeastOnce())->method ('error_handler');
// Mock will need to be configured (here?) and tested
// against specific error_handling settings
// not implemented yet nor needed for this post.
//set mock as error handler for duration of this test
set_error_handler (array($errorH, 'error_handler'));
//test current mock error handler configuration
// for different conditions-> NOTICE / WARNING / ERROR
// Give phpunit's toy back!
restore_error_handler ();
这是一种有效的方法吗?
set_error_handler()
调用您指定的方法,因此无需测试该方面。相反,编写测试以直接调用该方法并传入适当的参数。我将在答案中添加示例以说明。 - David Harknessset_error_handler()
。 - Ian Dunn