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

时间:2018-04-23 08:21:46

标签: laravel unit-testing command phpunit mockups

我使用的是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

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

非常感谢先进!

0 个答案:

没有答案