代码覆盖率分析

开发者在线 Builder.com.cn 更新时间:2008-01-28作者:三默 来源:CSDN

本文关键词: 分析 覆盖率 代码

第十章 代码覆盖率分析

你已经学会了怎么使用单元测试代码,但你怎么测试你的测试呢?你怎么发现没被测试的代码,换句话说,没被测试覆盖的代码?怎么衡量测试的完整性?所有这些问题的答案就是代码覆盖率分析。代码覆盖率分析告诉你当测试进行时,那些产品代码执行过了。

 

PHPUnit的代码覆盖率分析应用了Xdebug[6]扩展提供的语句覆盖率功能。 什么时语句覆盖率?举个例子来说,如果有一个方法有100个代码行,在测试进行时,只有75行真正运行了,这个方法的语句覆盖率就是75%。

 

[6] http://www.xdebug.org/

图1

 

1 显示了BankAccount(参见例12)的代码覆盖率报告。此HTML格式的报告是由PHPUnit命令行测试运行器生成的,使用--coverage-html选项。 黑字部分表示可执行的代码,灰字部分表示不可执行的代码,高亮代码行部分表示执行过的代码。

1-1. BankAccount类没有被测试完全覆盖。

 

此代码覆盖率报告表示,我们要增加代码覆盖率的话,就需要增加setBalance()depositMoney()withdrawMoney()的测试,并使用合法的值。例14 显示了如何增加BankAccountTest类的测试用例来提高BankAccount类的代码覆盖率。

14.用测试覆盖BankAccount

<?php

require_once 'PHPUnit2/Framework/TestCase.php';

require_once 'BankAccount.php';

 

class BankAccountTest extends PHPUnit2_Framework_TestCase {

// …

 

public function testSetBalance( ) {

    $this->ba->setBalance(1);

    $this->assertEquals(1, $this->ba->getBalance( ));

  }

 

  public function testDepositAndWidthdrawMoney( ) {

    $this->ba->depositMoney(1);   

    $this->assertEquals(1, $this->ba->getBalance( ));

 

    $this->ba->withdrawMoney(1);

    $this->assertEquals(0, $this->ba->getBalance( ));

  }

}

?>

 

见图2,我们看到类BankAccount已经被测试完全覆盖了。

图2

1-2

在本书后“PHPUnit Phing”一章中,你将学会怎么使用Phing生成更加详细的代码覆盖率报告。

 

查看本文来源

用户评论

  • 用户名
  • 评论内容