我有这堂课:
class PagSeguro {
public function pay()
{
if ( ! $this->checkAllData() )
{
return false;
}
return $this->buildPaymentURL();
}
private function checkAllData()
{
return true;
}
private function buildPaymentURL()
{
echo "not cool!\n\n";
return true;
}
}
而这个测试:
public function testPagSeguroPaymentData()
{
$m = m::mock('PagSeguro[buildPaymentURL]');
$m->shouldReceive('buildPaymentURL')
->once()
->andReturn('http://');
$this->assertEquals($m->pay(), 'http://');
}
如果我 var_dump($m) 我看到模拟的方法:
'buildPaymentURL' =>
class Mockery\ExpectationDirector#1507 (5) {
protected $_name =>
string(15) "buildPaymentURL"
protected $_mock =>
...
protected $_expectations =>
array(1) {
...
}
protected $_expectedOrder =>
NULL
protected $_defaults =>
array(0) {
...
}
}
}
但是当测试执行时,它调用的不是模拟的,而是真实的。除非我重命名
private function buildPaymentURL_RENAMED() {}
然后我得到一个绿色。
任何人都可以向我展示使用 Mockery 进行部分模拟的正确方法吗?