我使用的是Laravel 5.3。对于程序,我正在使用命令。命令类正在调用另一个类的方法。我想用phpunit进行单元测试。因此,我在命令类中模拟了类。当我运行测试时,实际的类方法正在运行,而不是模拟的方法。 Bevor我已经在工作中实现了命令的功能。在那里,我可以毫无问题地调用模拟方法。
测试类看起来像这样:
class CommandTest extends TestCase
{
public function setUp()
{
parent::setUp();
$this->api = $this->getMockBuilder('App\Services\APIRepository')
->setMethods(['getStatus'])
->getMock();
}
/** @test */
public function test_api()
{
...
$this->api->expects($this->any())
->method('getStatus')
->will($this->returnValue($api_response));
\Artisan::call('myapp:tracker',[]);
...
}
}
class Command extends Command
{
protected $signature = 'myapp:tracker';
private $api;
public function __construct(APIRepository $api)
{
$this->api = $api;
}
public function handle()
{
...
$status = $this->api->getStatus(...);
var_dump($status);
...
}
}
var_dump($ status)的输出为:NULL
我是否需要一种特殊的方法来模拟命令类中的类?
非常感谢先进!