Php 非本地运行代码的代码覆盖率

Php 非本地运行代码的代码覆盖率,php,unit-testing,http-headers,phpunit,code-coverage,Php,Unit Testing,Http Headers,Phpunit,Code Coverage,我目前正在为PHP开发一个简单的框架,用于管理和分派ajax调用。它的一个特性是,它会根据后端发生的情况自动发送适当的头文件。在过去的几天里,我已经开始为编写大量的单元测试,我正在努力获得一个像样的结果。(是的,高代码覆盖率本身并不意味着什么,我知道。但它仍然是一个很好的指标。) 然而,据我所知,当PHP处于CLI模式时,不可能发送/检查头,因此许多测试需要通过本地Web服务器运行。这使我能够轻松地检查标题和响应正文。不幸的是,PHPUnit自然不会跟踪这些测试期间执行的代码。(需要明确的是:可

我目前正在为PHP开发一个简单的框架,用于管理和分派ajax调用。它的一个特性是,它会根据后端发生的情况自动发送适当的头文件。在过去的几天里,我已经开始为编写大量的单元测试,我正在努力获得一个像样的结果。(是的,高代码覆盖率本身并不意味着什么,我知道。但它仍然是一个很好的指标。)

然而,据我所知,当PHP处于CLI模式时,不可能发送/检查头,因此许多测试需要通过本地Web服务器运行。这使我能够轻松地检查标题和响应正文。不幸的是,PHPUnit自然不会跟踪这些测试期间执行的代码。(需要明确的是:可以在本地检查的每一段代码都是在本地检查的。但是与标题相关的所有内容都不属于这一类。)

我知道我可以封装调用,并在测试期间用模拟对象替换它。然而,然后我必须重新实现头部替换的整个逻辑,而不是所有潜在的怪癖和错误,因此我基本上要测试我自己的
header()
-实现,而不是真正发生的事情-这正是我不想做的


所以我想我的问题是:我能不能在我的代码覆盖率报告中包含这些“远程调用”?或者我(这是我的猜测)必须接受这样一个事实:为了在真实环境下进行测试,我必须错过100%的代码覆盖率?

好吧,实际上,要获得整个代码库的100%覆盖率几乎是不可能的。您真正想要的是应用程序的核心(库和重用组件)。其余的都很好测试,但是如果您发现有些情况使测试变得非常困难,那么不要为几行不稳定的代码而感到压力


至于您的具体问题,我甚至不会为这类事情编写单元测试。我要写的是使用的UI测试。它仍然是完全自动化的,并且在PHPUnit中运行,但是它使用一个或多个浏览器。它实际上更像是一个集成或验收测试,而不是一个单元测试,但它工作得相当好…

显然,没有办法做到这一点


虽然ircmaxell的答案很有趣,但它并没有真正回答我的问题(因此我将这个答案标记为已接受)。

我有使用硒的经验,虽然它是一个很好的工具,但在这里并不适用。从我如何描述我的问题来看,这可能并不清楚。好吧,考虑到这些参考资料:。。。但是如果你想用另一种方式来描述这个问题,我还是会尽力帮助你…我在访问或测试报头或响应本身时没有任何问题,我使用Zend_Http_客户端来实现这一点。在这种特殊情况下,我真的看不出硒还有什么额外的好处。