当测试控制器,I可以合法地实现100%的代码覆盖,如下所示:
100%的代码覆盖率的正确报告的示例
控制器代码
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function example($option = null) {
if ($option == 'foo') {
$some_var = 'hello';
} elseif ($option == 'bar') {
$some_var = 'goodbye';
}
$this->set(compact('option', 'some_var'));
}
}
测试代码
<?php
App::uses('UsersController', 'Controller');
class UsersControllerTest extends ControllerTestCase {
public function testExampleFoo() {
$this->testAction('/users/example/foo');
$this->assertEquals('hello', $this->vars['some_var']);
}
public function testExampleBar() {
$this->testAction('/users/example/bar');
$this->assertEquals('goodbye', $this->vars['some_var']);
}
}
但是,我怎么能相信,我已经在我的意见达到了100%的代码覆盖率? 例如:
100%的代码覆盖率的报错的例子
控制器代码
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function example($option = null) {
$this->set('option', $option);
}
}
查看代码
<?php
if ($option == 'foo') {
$some_var = 'hello';
} elseif ($option == 'bar') {
$some_var = 'goodbye';
}
if (isset($some_var)) {
echo $some_var;
}
测试代码
<?php
App::uses('UsersController', 'Controller');
class UsersControllerTest extends ControllerTestCase {
public function testExampleFoo() {
$result = $this->testAction('/users/example/foo', array('return' => 'view'));
$this->assertEquals('hello', $result);
}
}
请注意,上述测试代码并不测试“/用户/示例/栏” URL,从而视图的elseif
从未测试。 因此,即使控制器的代码进行100%测试,我还没有真正实现了100%的代码覆盖率(因为视图的代码小于100%的测试)。 我能做些什么呢?