Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理PHPUnit中的控制器依赖?_Php_Unit Testing_Testing_Phpunit - Fatal编程技术网

如何处理PHPUnit中的控制器依赖?

如何处理PHPUnit中的控制器依赖?,php,unit-testing,testing,phpunit,Php,Unit Testing,Testing,Phpunit,我正在尝试为我的索引控制器编写测试,但我发现我需要将依赖项传递给它,以便能够测试其行为。我应用了可靠的原则,因此我总是使用依赖项注入容器来实例化控制器,因此我可以在测试文件中对控制器进行同样的实例化 让我头疼的问题是这个解决方案是否正确,因为我知道单元测试的重点是独立测试类,如果我使用依赖容器,我已经在游戏中放置另一个实体了。。我的意思是,如果依赖容器失败,那么我所有的控制器测试也会失败,这并不意味着控制器的工作出错,那么正确的解决方案是什么 <?php namespace App\Tes

我正在尝试为我的索引控制器编写测试,但我发现我需要将依赖项传递给它,以便能够测试其行为。我应用了可靠的原则,因此我总是使用依赖项注入容器来实例化控制器,因此我可以在测试文件中对控制器进行同样的实例化

让我头疼的问题是这个解决方案是否正确,因为我知道单元测试的重点是独立测试类,如果我使用依赖容器,我已经在游戏中放置另一个实体了。。我的意思是,如果依赖容器失败,那么我所有的控制器测试也会失败,这并不意味着控制器的工作出错,那么正确的解决方案是什么

<?php namespace App\Tests\Controller;

use \PHPUnit\Framework\TestCase;

use App\Controller\indexController;
use App\Controller\DependencyInjection;

class indexControllerTest extends TestCase
{
    public function testIndexControllerCheckIfReturnedCorrectHttpResponseCode ()
    {
        $controller = DependencyInjection::getInstance(indexController::class );

        $httpResponse = indexController()->index();

        return assertEqual( $httpResponse->getStatusCode(), 200 );
    }
}

我认为您应该自己创建控制器实例,并将依赖项作为模拟对象注入构造函数。
这是唯一一个控制器将具有真实实例,并且不会调用其他真实方法(如DependencyInjection:getInstance)

您还应该为DependencyInjection类进行单独的单元测试