【发布时间】:2014-04-07 00:31:37
【问题描述】:
假设您有描述应用程序数据访问层的接口。您还没有决定要使用哪种存储机制,您只是想确保无论您选择什么,它都能很好地处理并发请求。为此,您必须针对这些接口编写并发测试。
我认为示意性并发测试应该是这样的:
public function testMoneyIsNotLostByConcurrentTransfers(){
$accountRepository = DataAccessLayer::getBankAccountRepository();
$accountOfTom = $accountRepository->create(array(
'owner' => 'Tom',
'balance' => new Money(10000)
));
$accountOfBob = $accountRepository->create(array(
'owner' => 'Bob',
'balance' => new Money(10000)
));
$accountOfSusanne = $accountRepository->create(array(
'owner' => 'Susanne',
'balance' => new Money(10000)
));
$this->concurrentExecution(
function () use ($accountOfTom, $accountOfBob){
$accountOfTom->transfer($accountOfBob, new Money(5000));
},
function() use ($accountOfTom, $accountOfSusanne){
$accountOfSusanne->transfer($accountOfTom, new Money(5000));
}
);
$this->assertEquals($accountOfTom->getBalanceAmount(), 10000);
$this->assertEquals($accountOfBob->getBalanceAmount(), 15000);
$this->assertEquals($accountOfSusanne->getBalanceAmount(), 5000);
}
是否可以在 PHP 中编写这样的测试、测试运行程序?或者是否有任何现有的工具可以帮助 PHP 中的并发测试?
【问题讨论】:
标签: php testing concurrency automated-tests