在PHPUnit中,Laravel依赖注入自定义非控制器类失败

时间:2015-07-23 15:42:36

标签: laravel dependency-injection phpunit

所有

对于我正在进行的Laravel项目,我已经开始使用依赖注入来模拟我的测试中的类。但是,我发现如果我尝试注入没有显式父级的自定义类,那么有两件事情是真的:

  1. 运行应用程序时依赖项注入正常工作
  2. 在PHPUnit中运行测试时注入失败
  3. 以下是一些类似于我使用的示例代码:

    DemoController

    //  The controller we're testing
    class DemoController extends Controller
    {
        //  The injection and constructor
        private $helpLayer1;
    
        public function __construct(HelpLayer1 $helpLayer1)
        {
            $this->helpLayer1 = $helpLayer1;
        }
    
        ...
    
        //  The test function I call
        public function testDeps()
        {
            $this->helpLayer1->testLayer1();
        }
    }
    

    HelperLayer1

    //  Our first helper class
    class HelperLayer1
    {
        private $helpLayer2;
    
        public function __construct(HelpLayer2 $helpLayer2)
        {
            $this->helpLayer2 = $helpLayer2;
        }
    
        ...
    
        //  The testing function
        public function testLayer1()
        {
            //  When called via route, this dumps the actual object
            //  When called via test, this returns null
            dd($this->helperLayer2);
        }
    }
    

    Helper1ServiceProvider

    class Helper1ServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->bind('HelperLayer1', function()
            {
                return new HelperLayer1(App::make('HelperLayer2'));
            });
        }
    
        [OR]
    
        public function register()
        {
            $this->app->bind('HelperLayer1', 'HelperLayer1');
        }
    }
    

    Helper2ServiceProvider

    class Helper2ServiceProvider extends ServiceProvider
    {
        public function register()
        {
            $this->app->bind('HelperLayer2', 'HelperLayer2');
        }
    }
    

    我使用DI比较新,所以我不完全确定这个设置是否正确,但我不知所措。

    任何帮助将不胜感激!谢谢!

0 个答案:

没有答案