PHPunit和getopt

4

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

有没有办法在PHPunit中使其正常工作?

我已经尝试在组件调用之前插入以下内容:

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

但是那样做是不可行的。

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,
)

我通过谷歌搜索了解到这个主题,但是这种方法在PHPUnit命令行测试运行器中不起作用。它使用ini_set()设置php.ini设置,但这对于此目的无效;显然需要在解释器启动之前设置该设置。 - Max Crowe
@MaxCrowe PHP的哪个版本,PHPUnit的哪个版本? - Darren Cook
这是 PHP 5.3.29 和 PHPUnit 4.6。 - Max Crowe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接