4

我正在尝试测试一个使用第三方库的组件,该第三方库利用 getopt 检索命令行参数。

有什么办法可以让我在 PHPunit 中工作吗?

我尝试在组件调用之前插入它:

$args = explode( ' ', 'scriptName -q staging_to_xxx -w 250 -c 500' );
$_SERVER['argv'] = $args;

但这不起作用。

4

1 回答 1

3

您可以使用 php.ini 设置,register_argc_argv=false以允许您设置 argv 和 argc 全局变量。似乎 getopt 使用全局变量,这意味着这种方法将起作用。

<?php
$GLOBALS['argv']=array(
    'argv_test.php',
    '-a999',
    '-b',
    );
$GLOBALS['argc']=count($argv);
var_export(getopt("a:b"));
?>

如果您已将该脚本称为“argv_test.php”,则首先正常运行:

$ php  argv_test.php -a777 -b
array (
  'a' => '777',
  'b' => false,
)

然后通过覆盖 ini 设置运行:

$ php -d register_argc_argv=false argv_test.php
array (
  'a' => '999',
  'b' => false,
)
于 2012-07-04T23:56:27.330 回答