我认为我的应用程序存在设计缺陷。我会解释为什么。
我有一个围绕 httpclient 的包装器,它被注入(通过 php-di)到各种其他类中。
我使用 Slim 创建一个 api。当调用进入我的应用程序时,Slim 会将它引导到正确的控制器,该控制器注入了一个 httpclient。(实际上,注入 httpclient 的不是控制器,但我试图在示例中保持简单)
现在到单元测试(集成测试)部分。我使用引导文件来初始化 slim(使用 php-di 桥接器)。我对每个环境都有不同的文件。所以另一个类(存根,如果你喜欢的话),作为 httpclient 注入到控制器中。
到目前为止,一切都很好。现在我想根据我的意愿改变这个 httpclient-stub 的结果。像这样:
// Arrange
$request = ..;
$response = ..;
$httpclientStub->setResponseMessage($response);
//Act
$response = $app->process($request, new Response());
//Assert
..
不幸的是,我无法从测试函数中访问 $httpclientStub。我现在使用单例类将变量从测试传递到存根。这是相当丑陋的。
对于更好的“存根”解决方案有什么建议吗?