如何在Laravel中模拟命令类中的类

如何在Laravel中模拟命令类中的类,laravel,unit-testing,command,phpunit,mockups,Laravel,Unit Testing,Command,Phpunit,Mockups,我使用的是Laravel 5.3。对于程序,我使用的是命令。命令类正在调用另一个类的方法。我想用phpunit对它进行单元测试。因此,我在command类中模拟了该类。当我运行测试时,类的实际方法正在运行,而不是模拟方法。Bevor我已经在作业中实现了命令的功能。在那里,我可以毫无问题地调用mock方法 测试类如下所示: class CommandTest extends TestCase { public function setUp() { parent::

我使用的是Laravel 5.3。对于程序,我使用的是命令。命令类正在调用另一个类的方法。我想用phpunit对它进行单元测试。因此,我在command类中模拟了该类。当我运行测试时,类的实际方法正在运行,而不是模拟方法。Bevor我已经在作业中实现了命令的功能。在那里,我可以毫无问题地调用mock方法

测试类如下所示:

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

我需要一个特殊的方法来模拟命令类中的类吗


非常感谢先进的

你写的看起来不错(除了重复的函数名,我认为这是你问题中的错误,而不是你的原始代码),所以我认为你需要提供更多的代码。现在很难知道会出什么问题-例如:您实际上如何调用
$this->api
?你不能分享code@Robbie正如你所说,我的问题有点含糊不清。我修复了重复的函数名,并为命令类提供了调用
$this->api