Laravel 5 使用phpunit测试Laravel(5.1)控制台命令
测试Laravel控制台命令的最佳方法是什么 下面是我正在运行的一个命令示例。它在构造函数和handle方法中接受一个值Laravel 5 使用phpunit测试Laravel(5.1)控制台命令,laravel-5,phpunit,Laravel 5,Phpunit,测试Laravel控制台命令的最佳方法是什么 下面是我正在运行的一个命令示例。它在构造函数和handle方法中接受一个值 class DoSomething extends Command { protected $signature = 'app:do-something'; protected $description = 'Does something'; public function __construct(A $a) { ...
class DoSomething extends Command
{
protected $signature = 'app:do-something';
protected $description = 'Does something';
public function __construct(A $a)
{
...
}
public function handle(B $b)
{
...
}
}
在我的测试课上,我可以模拟A和B,但我不知道如何通过A
$this->artisan('app:do-something', [$b]);
可能吗?还是我完全错了?我应该将所有内容都传递给handle()方法吗
谢谢。您必须改变在测试中调用命令的方式,但是可以模拟通过的对象 如果Artisan使用的类是按如下方式注入的依赖项:
public function __construct(ActualObject $mocked_A)
{
//
}
然后像这样编写测试用例:
$mocked_A = Mockery::mock('ActualObject');
$this->app->instance('ActualObject', $mocked_A);
$kernel = $this->app->make(Illuminate\Contracts\Console\Kernel::class);
$status = $kernel->handle(
$input = new Symfony\Component\Console\Input\ArrayInput([
'command' => 'app:do-something',
]),
$output = new Symfony\Component\Console\Output\BufferedOutput
);
$console_output = $output->fetch();
$this->app->instance('ActualObject',$mocked_A)代码>行是您可以调用和使用类或对象的模拟版本,而不是实际版本的代码
这将在Laravel或Lumen中工作。您想在这种情况下模拟$A吗?不只是通过实际对象?在本例中,它是我的记录器,所以我不想通过实际实例。