gpt4 book ai didi

php - 对需要发送 header 的项目进行单元测试

转载 作者:IT王子 更新时间:2023-10-29 00:49:24 27 4
gpt4 key购买 nike

我目前正在使用 PHPUnit 尝试开发测试以及我正在编写的内容,但是,我目前正在编写 session 管理器,并且在这样做时遇到了问题...

Session处理类的构造函数是

private function __construct()
{
if (!headers_sent())
{
session_start();
self::$session_id = session_id();
}
}

但是,由于 PHPUnit 在开始测试之前会发送文本,因此对该对象的任何测试都会返回失败的测试,因为 HTTP“ header ”已被发送...

最佳答案

嗯,您的 session 管理器基本上是被设计破坏的。为了能够测试某些东西,必须能够将其与副作用隔离开来。不幸的是,PHP 的设计方式是鼓励自由使用全局状态(echoheaderexitsession_start 等等等等)。

您能做的最好的事情是隔离组件中的副作用,这些副作用可以在运行时进行交换。这样,您的测试可以使用模拟对象,而实时代码使用具有真正副作用的适配器。您会发现这不适用于单例,我认为您正在使用单例。因此,您必须使用一些其他机制来将共享对象分发到您的代码中。您可以从静态注册表开始,但如果您不介意学习一点,还有更好的解决方案。

如果您不能这样做,您始终可以选择编写集成测试。例如。使用 PHPUnit 的 WebTestCase .

关于php - 对需要发送 header 的项目进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/190292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com