繁体   English   中英

PHPUnit与Slim和PHP-DI一起使用

[英]PHPUnit working with Slim and PHP-DI

我认为我的应用程序存在设计缺陷。 我会解释原因。

我有一个围绕httpclient的包装,该包装通过其他各种类注入(通过php-di)。

我使用Slim创建一个api。 当呼叫进入我的应用程序时,Slim将引导它到正确的控制器,该控制器注入了httpclient。 (实际上,不是注入了h​​ttpclient的是他的控制器,但我正在尝试简化示例)

现在到unittesting(集成测试)部分。 我使用引导程序文件来初始化苗条(使用php-di桥)。 对于每种环境,我都有不同的文件。 因此,另一个类(如果需要,可以添加存根)作为httpclient注入到控制器中。

到现在为止还挺好。 现在,我希望将此httpclient-stub的结果更改为我的愿望。 像这样:

// Arrange
$request = ..;
$response = ..;
$httpclientStub->setResponseMessage($response);

//Act
$response = $app->process($request, new Response());

//Assert
..

不幸的是,我无法从测试功能中访问$ httpclientStub。 我现在使用单例类将变量从测试传递到存根。 这是相当丑陋的。

有更好的“存根”解决方案的建议吗?

我使用了以下方法,根本不需要使用单例。 我们在测试运行时更换容器。 感觉好多了。

public function setResponseMessage(HttpMessage $response)
    {
      $httpClient = new \Stub\HttpClientStub();
      $httpClient->setResponseMessage($response);

      $container = $this->app->getContainer();
      $container->set(\Helper\IHttpClient::class, $httpClient);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM