我已经找到了一个本机解决方案,以便在遇到目标类/对象中没有定义测试的方法时让PHPUnit失败。到目前为止,我还没有找到办法做到这一点。
与此同时,我自己推出的解决方案是在我的所有测试类的顶部包含以下测试:
public function test_MethodCoverage ()
{
$Class = new ReflectionClass($this->_className);
$methods = $Class->getMethods();
foreach ( $methods AS $v ) {
$this->assertTrue(
method_exists( $this, 'test'.ucfirst($v->name) ),
'Test for method '. $v->name .' does not exist'
);
}
}
注意:$this->_className
是在setUp()
中创建的属性,其中包含目标类路径。
我想知道,如果不手动完成此功能,是否有更合适/原生的方式?
由于
答案 0 :(得分:0)
如果您希望所有方法都经过测试,那么您的解决方案非常好。但是必须对某些私有方法进行间接测试,因此您应该使用代码覆盖工具来分析测试的方法和未测试的方法。
使用phpunit代码coverabe工具非常简单。例如:
phpunit --coverage-html ./report BankAccountTest
来源:http://phpunit.de/manual/3.7/en/code-coverage-analysis.html