【发布时间】:2011-09-11 16:15:23
【问题描述】:
用例:我正在尝试为我的单元测试框架创建一个诊断测试,该框架运行每个测试用例,然后返回测试用例尚未涵盖的公共方法列表.我们的想法是通过确保每个公共方法的所有公共方法都经过至少 1 个单元测试的测试来增加测试覆盖率。
问题:我无法检测是否调用了某个类中的方法。我试过使用 debug_backtrace() 函数,但它只返回来自测试框架的调用,而不是正在测试的类方法。我可以获得正在运行的方法名称的唯一方法是将 debug_backtrace() 函数实际放入测试类的方法中,这是一个不可接受的选项,因为我必须在每个类的每个公共方法中都有它。
是否有另一种方法可以进行回溯以获取测试的类方法?或者,用一种稍微不同的方法,有没有办法启动和停止一个监听器来记录所有被调用的方法(我可以解析出任何不属于的东西)?
伪代码:
runTest($testName){
//run the test
//get all recent classes and methods used
//parse out test framework info
//compare used public methods to public method list for the tested class
}
或者:
runTest($testName){
//start listener
//run the test
//close listener, get all recent classes and methods used
//parse out test framework info
//compare used public methods to public method list for the tested class
}
【问题讨论】:
-
“这个想法是通过确保每个公共方法的所有公共方法都经过至少 1 个单元测试的测试来增加测试覆盖率。” --- 我认为这个指标不能代表任何有用的东西。为什么不像其他 (phpunit) 测试框架那样使用 xdebug?
-
@zerkms - 你能解释一下为什么你认为这个指标没有用吗?重点不是暗示一个方法被至少 1 个单元测试完全覆盖,而是要指出哪些公共方法根本没有任何 覆盖。至于 xdebug,如果没有必要,我不希望强制用户安装额外的扩展。
-
"any call" 对我来说不是有用的指标。方法可以是 100 行的长度,但覆盖 1%(仅第一行带有
if ($bla) return;)。
标签: php unit-testing debugging reflection stack-trace