我是 TDD 和 phpunit 的新手。
我正在测试基于其执行方法分叉的代码:
if (PHP_SAPI!='cli') {
header('HTTP/1.1 '.$statusCode);
}
我想获得尽可能多的代码覆盖率,但我似乎无法测试这部分(因为 phpunit 正在通过命令行界面进行测试)。
有没有解决的办法?或者另一种方法来测试这部分?
我考虑过尝试 curl 或其他东西,但是测试运行的位置将与测试它的用户的系统相关。
我是 TDD 和 phpunit 的新手。
我正在测试基于其执行方法分叉的代码:
if (PHP_SAPI!='cli') {
header('HTTP/1.1 '.$statusCode);
}
我想获得尽可能多的代码覆盖率,但我似乎无法测试这部分(因为 phpunit 正在通过命令行界面进行测试)。
有没有解决的办法?或者另一种方法来测试这部分?
我考虑过尝试 curl 或其他东西,但是测试运行的位置将与测试它的用户的系统相关。
将该比较抽象为自己的方法。在您的测试中模拟该方法以控制它是否进入该块。
if ($this->_isCli()) {
header('HTTP/1.1 '.$statusCode);
}
protected function _isCli() {
return PHP_SAPI!='cli';
}
如果您使用的是 Mockery 包,则无法模拟受保护的方法。这是其中一位开发人员的评论->调用模拟的受保护方法
但是如果你使用php_sapi_name
原生函数,你仍然可以创建一个有效的测试
然后,您可以在测试中(在同一个命名空间内)创建一个具有相同名称的虚拟函数来返回任何值。
或者
在 PHPUnit 中使用扩展来模拟静态和本机函数 -> phpunit-mockfunction