如何重置PHPUnit的模仿对象(How to reset a Mock Object with P

2019-09-16 17:10发布

如何重置为PHPUnit的嘲弄预计()?

我有我想测试中多次调用,重置每次运行的预期SoapClient的的模拟。

$soapClientMock = $this->getMock('SoapClient', array('__soapCall'), array($this->config['wsdl']));
$this->Soap->client = $soapClientMock;

// call via query
$this->Soap->client->expects($this->once())
    ->method('__soapCall')
    ->with('someString', null, null)
    ->will($this->returnValue(true));

$result = $this->Soap->query('someString'); 

$this->assertFalse(!$result, 'Raw query returned false');

$source = ConnectionManager::create('test_soap', $this->config);
$model = ClassRegistry::init('ServiceModelTest');

// No parameters
$source->client = $soapClientMock;
$source->client->expects($this->once())
    ->method('__soapCall')
    ->with('someString', null, null)
    ->will($this->returnValue(true));

$result = $model->someString();

$this->assertFalse(!$result, 'someString returned false');

Answer 1:

随着越来越多的调查了一下,好像你只需要调用()再次期待。

然而,与示例中的问题是$这个 - >使用一次()。 对于测试的持续时间,与预计相关联的计数器()不能被复位。 为了解决这个问题,你有两个选择。

第一个选项是忽略的次数它被调用$这个 - >任何()。

第二个选项是针对与这 - $>在($ x)的使用该呼叫。 请记住,这 - $>在($ x)是模拟对象被调用的次数,而不是特定的方法中,在0开始。

随着我的具体的例子,因为模拟测试是一样的两次,并预计只叫了两次,我也可以用$这个 - >确切(),只有一个预期()语句。 即

$soapClientMock = $this->getMock('SoapClient', array('__soapCall'), array($this->config['wsdl']));
$this->Soap->client = $soapClientMock;

// call via query
$this->Soap->client->expects($this->exactly(2))
    ->method('__soapCall')
    ->with('someString', null, null)
    ->will($this->returnValue(true));

$result = $this->Soap->query('someString'); 

$this->assertFalse(!$result, 'Raw query returned false');

$source = ConnectionManager::create('test_soap', $this->config);
$model = ClassRegistry::init('ServiceModelTest');

// No parameters
$source->client = $soapClientMock;

$result = $model->someString();

$this->assertFalse(!$result, 'someString returned false');

荣誉对于这个答案以$这个- >在()和$这个- >正是辅助()



文章来源: How to reset a Mock Object with PHPUnit