【问题标题】:PHPUnit, superglobal vars. How to setup test such that $_SERVER and $_GET are properly set?PHPUnit,超全局变量。如何设置测试以正确设置 $_SERVER 和 $_GET?
【发布时间】:2010-03-08 10:04:37
【问题描述】:

我正在编写一些 PHP 代码来解析传入的 URL。它严重依赖于 PHP 全局变量,例如 $_SERVER$_GET。我正在考虑在 PHPUnit 单元测试 setUp() 函数中手动设置这些。有更好的方法吗?

【问题讨论】:

    标签: php phpunit


    【解决方案1】:

    一个想法是将 $_SERVER 和 $_GET 包装到类中,而不是直接访问它们,这样您就不必完全依赖它们。您在常用框架中经常看到这种方法。这样您就可以轻松地存根或模拟请求,而无需设置超全局变量的状态。

    此类的一个示例如下: https://codereview.stackexchange.com/questions/73515/http-request-response-class

    【讨论】:

    • 你能举例说明如何在没有包装器的情况下设置超全局变量的状态吗? (虽然很臭)
    • @JayIsTooCommon 您只需在测试中设置它们,例如$_SERVER["foo"] = 42 如果我没记错的话。可以在实际的测试方法或 setup() 或 setupbeforeclass() 中这样做(如果现在仍然存在)
    • 啊,好吧,那我一定是做错了什么。谢谢:)
    • 我知道这个线程有点老了,但我有一个问题:即使你将全局变量 $_SERVER、$_GET 等包装在一个类中,你仍然需要测试使用这些变量并从中返回数据的类。你能提供一个包装类的例子吗?
    • @tonix 添加了一个指向示例类的链接。有了它,您只需在生产中执行新的Request($_GET, $_POST, …),在测试中您将使用new Request([], [], …),例如您将传入包含您的 $_GET、$_POST 等预期保存的数组。
    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2022-11-20
    • 2010-12-03
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多