php开发模拟,PHP开发API时怎么样模拟数据?

其实每次请求的区别就是$_GET、$_POST、$_COOKIE、$_SERVER这些环境数据在发生改变,所以只要改变这些环境数据再执行Controller就能够模拟请求了

我用单元测试的方式来实现,代码大概就是下面这个样子,其实每次模拟请求就是通过router去执行controller类的不同方法而已

还可以使用phpunit --process-isolation参数把每次测试放到单独的php进程里执行,避免某些代码逻辑反复执行导致的状态污染问题

PHP/**

* @example

* $this->execute(array(

* 'path' => '/foo/bar',

* 'method' => 'GET',

* 'get' => array(),

* 'post' => array(),

* 'headers' => array(

* 'Content-Type' => 'text/html'

* ),

* ));

*/

protected function execute(array $options) {

if (!isset($options['path'])) {

$options['path'] = $this->path;

}

$_SERVER = array();

$_GET = $_POST = array();

$_SERVER['REQUEST_URI'] = isset($options['path']) ? $options['path'] : '/';

$method = isset($options['method']) ? strtoupper($options['method']) : 'GET';

$_SERVER['REQUEST_METHOD'] = $method;

if (isset($options['get'])) {

$_GET = $options['get'];

}

if (isset($options['post'])) {

$_POST = $options['post'];

}

$headers = isset($options['headers']) ? $options['headers'] : array();

foreach ($headers as $key => $value) {

$key = 'HTTP_'.strtoupper(str_replace('-', '_', $key));

$_SERVER[$key] = $value;

}

return $this->router->execute();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值