使用laravel5做单元测试时,碰到以下问题,需要测试querySessionIdTest这个方法,
但是需要mock出sessionidtest这个方法,具体代码如下:
类如下:
class ZabbixSystem implements ApmSystemInterface
public function querySessionIdTest()
{
echo 'querySessionIdTest';
return $this->sessionidtest();
}
public function sessionidtest()
{
echo 'sessionidtest';
return 'aaa';
}
}
单元测试方法:
public function testQuerySessionIdSuccess()
{
$return = 'aaa';
$stub = Mockery::mock('mcokname');
// $this->app->instance('ZabbixSystem', $stub);
$stub->shouldReceive('querySessionIdTest')->andReturn($return);
$response = $stub->querySessionIdTest();
$this->assertEquals('aaa', $response);
}
public function testQuerySession()
{
// 为 SomeClass 类创建桩件。
$stub = $this->getMockBuilder('App\Services\ZabbixSystem')->setMethods(array(
'querySessionIdTest',
'sessionidtest'
))->getMock();
// 配置桩件。
$stub->method('sessionidtest')->willReturn('111');
$this->app->instance('ZabbixSystem', $stub);
$this->assertEquals('foo', $stub->querySessionIdTest());
}
通过两种方式进行测试,但都不成功,我希望的结果为:
echo 'querySessionIdTest';
然后测试成功