PHPUnit,超全局变量。如何设置测试以正确设置$\u SERVER和$\u GET?

PHPUnit,超全局变量。如何设置测试以正确设置$\u SERVER和$\u GET?,php,phpunit,Php,Phpunit,我正在编写一些PHP代码来解析传入的URL。它严重依赖PHP全局函数,如$\u SERVER和$\u GET。我正在考虑在PHPUnit单元测试setUp()函数中手动设置这些。有更好的方法吗?一个想法是将$\u SERVER和$\u GET封装到类中,而不是直接访问它们,这样您就不必完全依赖它们。您经常在公共框架中看到这种方法。通过这种方式,您可以轻松地存根或模拟请求,而无需设置超全局的状态 此类课程的一个示例如下: 您能举例说明如何在没有包装器的情况下设置超全局的状态吗?(尽管很臭)@Jay

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

一个想法是将$\u SERVER和$\u GET封装到类中,而不是直接访问它们,这样您就不必完全依赖它们。您经常在公共框架中看到这种方法。通过这种方式,您可以轻松地存根或模拟请求,而无需设置超全局的状态

此类课程的一个示例如下:

您能举例说明如何在没有包装器的情况下设置超全局的状态吗?(尽管很臭)@JayIsTooCommon您只需在测试中设置它们,例如$_SERVER[“foo”]=42(如果我没记错的话)。可以在实际的测试方法中,或者在setup()中,或者在setupbeforeclass()中这样做(如果现在仍然存在的话)啊,好吧,那么我一定是做错了什么。谢谢:)我知道这个线程有点旧,但我有一个问题:即使你包装全局变量$\u SERVER,$\u GET,等等。。。在类中,您仍然需要测试使用这些变量并从中返回数据的类。您能提供包装类的示例吗?@tonix添加了一个指向示例类的链接。有了它,您只需在生产环境中执行新的
请求($\u GET,$\u POST,…)
,而在测试中,您将使用
新请求([]、[]、…)
,例如,您将传入包含您的$\u GET、$\u POST等所需内容的数组。