使用PHPUnit测试异步方法

时间:2015-03-17 12:41:34

标签: php phpunit

我尝试使用睡眠和尝试方法。但它有时会失败。标准是什么?周围找不到任何明显的东西。感谢。

function foo($callback)
{
    $bar->asyncCall($callback);
}

function testFoo()
{
    $semaphore = 1;
    foo(function() {
        $semaphore = 0;
    });
    sleep(5) until $semaphore == 0;
}

使用这种方法,testFoo()有时永远不会返回。我怀疑某个地方陷入僵局。

1 个答案:

答案 0 :(得分:2)

php范围变量的方式,您不会在测试中更改相同的$semaphore变量。您正在传递给foo(...)的匿名方法中创建一个新变量。

您需要使用use关键字标记var。

function testFoo()
{
    $semaphore = 1;
    foo(function() use ($semaphore) {
        $semaphore = 0;
    });
    $this->assertEquals(0, $semaphore);
}

不需要睡眠,因为这与我们从这里看到的不同步。有关$bar->asynCall()的更多信息将是必需的。 在此处查看有关变量范围的更多信息:http://php.net/manual/en/functions.anonymous.php