2010-04-27 100 views
11

我是新的测试,我使用PHPUnit编写测试。所有的网站都是使用MVC模式设计的。POST参数到PHPUnit测试

我想测试我的控制器上的每个方法,问题是这样的方法通过$ _POST变量接收参数。我怎样才能覆盖这个变量?

在此先感谢亚历杭

回答

15

最好的办法是抽象的请求到一个单独的类,而不是在所有访问超全局。这样你可以将实际的服务器和请求环境从应用程序中分离出来。然后,您可以轻松模拟请求。

+0

但有必要对此进行测试的要求独立的类。如何做到这一点最好的方法? – 2014-09-13 07:02:18

+0

@ViktorTodorov进行单元测试。如果您想针对多个SAPIs进行测试:使用集成测试 – Gordon 2014-09-13 07:45:27

9

即使有些人会说这不是干净,你可以在$_POST设定数据,callng你的方法之前:这不是只读;-)

17

首先,如果你使用的是Zend_Test,使用

$this->request->setMethod('POST')->setPost(array(insert array info here)); 

如果你没有使用,试试这个:

警告:不是最好的解决办法,但它的工作!

在你的安装夹具将这个

protected function setUp() 
    { 
     parent::setUp(); 
     $_POST = array(); 
    } 

然后你打电话给你测试只是做一些类似的面前:

$_POST = array(insert array data here) 
+0

此答案的第一部分非常有帮助。谢谢。 – 2011-04-10 15:19:16

+0

即使是第二部分也帮助我进行了TYPO3和单元测试 – 2016-05-02 11:04:18