编程语言
首页 > 编程语言> > 使用PHPUnit在php中测试关机例程(register_shutdown_function)

使用PHPUnit在php中测试关机例程(register_shutdown_function)

作者:互联网

我有一个File类,带有-> deleteOnExit函数.如果调用此函数,则文件将在关机时自行删除. File类使用register_shutdown_function函数来实现此目的,并在运行关闭处理程序时删除文件.问题是,我如何在PHPUnit中对此进行测试.我试过了

$file = new File(__DIR__ . "/delete_on_exit.txt");
$file->createFile();
$file->deleteOnExit();
register_shutdown_function(function() use ($file) {
    $this->assertFalse($file->exists());
});

但这没有用.我猜这是因为在调用register_shutdown_function注册的函数时,PHPUnit已经完成了其测试.

有没有办法做到这一点?

解决方法:

您可能应该在内部使用tmpfile()(documentation),而不要使用关闭功能删除文件.

另外,PHPUnit的工作方式无法测试正确的关机删除. PHPUnit测试在单个庞大的“应用程序”中运行-只有在最后一次测试完成并且完成了其他所有任务(如生成代码覆盖率)之后,才会调用任何关闭功能.目前,测试报告要报告该文件确实已被删除为时已晚.

另外,由于这个原因,我怀疑您的代码是否会可靠地删除该文件,因为任何其他仅调用exit()的已注册关闭函数都会阻止您的关闭函数删除该文件.使用tmpfile()时似乎不存在所有这些问题,因为这是操作系统支持的调用,如果打开该文件的进程由于任何原因死亡,它将删除该文件.

标签:phpunit,php
来源: https://codeday.me/bug/20191121/2055334.html