Unit testing artisan中的依赖项注入

Unit testing artisan中的依赖项注入,unit-testing,laravel-4,mocking,Unit Testing,Laravel 4,Mocking,我有一个artisan命令,我想为它编写一些单元测试。然而,我在其中使用的模型有副作用,需要模拟/存根。我尝试使用标准的laravel依赖项注入方法,将该类的对象作为参数添加到构造函数中,但没有成功。如何在artisan命令类中模拟/存根/伪造对象以进行测试?虽然artisan显然不支持依赖项注入,但您可以安排一些事情来允许它。在您正在测试的类中,使用App::make代替直接调用对象来生成对象。然后可以使用App::bind替换另一个类 因此,在你的目标课程中,你应该: $obj = App:

我有一个artisan命令,我想为它编写一些单元测试。然而,我在其中使用的模型有副作用,需要模拟/存根。我尝试使用标准的laravel依赖项注入方法,将该类的对象作为参数添加到构造函数中,但没有成功。如何在artisan命令类中模拟/存根/伪造对象以进行测试?

虽然artisan显然不支持依赖项注入,但您可以安排一些事情来允许它。在您正在测试的类中,使用App::make代替直接调用对象来生成对象。然后可以使用App::bind替换另一个类

因此,在你的目标课程中,你应该:

$obj = App::make('Some_Class');
然后在单元测试函数中,您将执行以下操作:

App::bind('Some_Class', 'SomeClassStub');
因此,当您的目标类尝试创建Some_类对象时,它将获得SomeClassStub的对象

请注意,它可能不会自动找到要替换的类-如果存根类文件不在标准自动加载位置,则可能需要
require
语句才能使用它。例如,我将我的存根类与单元测试放在同一个文件夹中,这不是laravel自动加载的。要将目录添加到自动加载程序,我将其放入单元测试构造函数中:

Illuminate\Support\ClassLoader::addDirectories(__DIR__);