簡體   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