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