我对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();
答案 0 :(得分:1)
在测试方法之前,我会尝试将$this->sig
设置为stop
,允许它只运行一次。您应该主要关注测试$this->runTask()
,但我理解希望更好地覆盖并测试break;
逻辑。
问题是,如果"停止逻辑"如果失败,您的测试可能会永远运行,因此您需要为测试套件设置时间限制(请参阅PHPUnit Strict Mode)。在PHP中定时函数调用是很困难的(参见here),并且可能需要涉及分离子进程,但这也可以完成。尝试尽可能少地在while循环中执行(即使停止检查可以重构为if ($this->shouldStop()) break;
,然后只需测试$this->shouldStop()
和$this->runTask()
。