工匠的依赖注入

时间:2014-03-03 09:53:35

标签: unit-testing laravel-4 mocking

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

1 个答案:

答案 0 :(得分:0)

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

因此,在您的目标类中,您将拥有:

$obj = App::make('Some_Class');

然后在你的单元测试功能中,你会这样做:

App::bind('Some_Class', 'SomeClassStub');

因此,当您的目标类尝试创建Some_Class对象时,它将获得SomeClassStub的对象。

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

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