如何为php守护进程设置phpunit测试

时间:2015-03-14 10:48:06

标签: php mocking phpunit

我对PHPUnit很陌生,需要一些关于如何正确测试这个Daemon类,start()runTask()方法的建议。

class Daemon {
    public function start() {
        // Start the loop
        while (true) {
            // This is the code you want to loop during the service...
            $this->runTask();

            // If signaled to stop
            if ('stop' == $this->sig) {
                // Break the loop
                break;
            }

            // Now before we 'Task' again, we'll sleep for a bit...
            usleep($this->delay);
        }
    }
}

我试图使用模拟器,但它似乎无法工作。

$mock = $this->getMock('Daemon');
$mock->expects($this->once())->method('runTask');
$mock->start();

1 个答案:

答案 0 :(得分:1)

在测试方法之前,我会尝试将$this->sig设置为stop,允许它只运行一次。您应该主要关注测试$this->runTask(),但我理解希望更好地覆盖并测试break;逻辑。

问题是,如果"停止逻辑"如果失败,您的测试可能会永远运行,因此您需要为测试套件设置时间限制(请参阅PHPUnit Strict Mode)。在PHP中定时函数调用是很困难的(参见here),并且可能需要涉及分离子进程,但这也可以完成。尝试尽可能少地在while循环中执行(即使停止检查可以重构为if ($this->shouldStop()) break;,然后只需测试$this->shouldStop()$this->runTask()