0

我正在尝试为我的索引控制器编写测试,但我看到我需要将依赖项传递给它才能测试它的行为,我应用了 SOLID 原则,所以我总是使用依赖注入容器来实例化控制器,所以我可以对测试文件中的控制器进行同样的操作。

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

<?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 );
    }
}
4

1 回答 1

0

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

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

于 2019-11-22T12:34:59.427 回答