[英]PHPUnit working with Slim and PHP-DI
我認為我的應用程序存在設計缺陷。 我會解釋原因。
我有一個圍繞httpclient的包裝,該包裝通過其他各種類注入(通過php-di)。
我使用Slim創建一個api。 當呼叫進入我的應用程序時,Slim將引導它到正確的控制器,該控制器注入了httpclient。 (實際上,不是注入了httpclient的是他的控制器,但我正在嘗試簡化示例)
現在到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.