php - 如何处理 PHPUnit 中的 Controller 依赖项?

标签 php unit-testing testing phpunit

我正在尝试为我的索引 Controller 编写测试,但我发现我需要将依赖项传递给它才能测试它的行为,我应用了 SOLID 原则,所以我总是使用依赖项注入(inject)来实例化 Controller 容器,因此我可以在测试文件中对 Controller 执行相同的操作。

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

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

最佳答案

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

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

关于php - 如何处理 PHPUnit 中的 Controller 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58668111/

相关文章:

php - ACCESS_REFUSED - 使用身份验证机制 AMQPLAIN 拒绝登录

php - 如何使用 print_r 只显示数组中的文本

php - 在扩展前的 url 末尾 append 字符串

php - sql查询去除随机字符

java - Mockito Junit test coverage 去除单元测试覆盖

c# - 如何在 Specflow 中管理全局变量

c# - 如果可以使用 Task.Result,为什么需要 "async"支持 MS 单元测试?

java - 如何将测试覆盖率添加到私有(private)构造函数?

angularjs - 如何点击 angular-ui 日期选择器弹出窗口 Today 按钮?

c++ - 我能否轻松移植 Qt 应用程序?