1

我是 TDD 和 phpunit 的新手。

我正在测试基于其执行方法分叉的代码:

if (PHP_SAPI!='cli') {
    header('HTTP/1.1 '.$statusCode);
}

我想获得尽可能多的代码覆盖率,但我似乎无法测试这部分(因为 phpunit 正在通过命令行界面进行测试)。

有没有解决的办法?或者另一种方法来测试这部分?

我考虑过尝试 curl 或其他东西,但是测试运行的位置将与测试它的用户的系统相关。

4

2 回答 2

1

将该比较抽象为自己的方法。在您的测试中模拟该方法以控制它是否进入该块。

if ($this->_isCli()) {
    header('HTTP/1.1 '.$statusCode);
}

protected function _isCli() {
  return PHP_SAPI!='cli';
}
于 2013-09-25T20:03:42.867 回答
0

如果您使用的是 Mockery 包,则无法模拟受保护的方法。这是其中一位开发人员的评论->调用模拟的受保护方法

但是如果你使用php_sapi_name原生函数,你仍然可以创建一个有效的测试

然后,您可以在测试中(在同一个命名空间内)创建一个具有相同名称的虚拟函数来返回任何值。

或者

在 PHPUnit 中使用扩展来模拟静态和本机函数 -> phpunit-mockfunction

于 2014-12-17T20:37:19.417 回答