我正在使用 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
我需要一种特殊的方法来模拟命令类中的类吗?
非常感谢先进!