3

我正在使用 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

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

非常感谢先进!

4

0 回答 0