PHPUnit袖珍指南 第十章 代码覆盖率分析

翻译 2006年05月31日 21:05:00

 

第十章 代码覆盖率分析

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

 

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生成更加详细的代码覆盖率报告。

 

--------------------------------------------------------------------------------------------------------------------

原文:

Chapter 10. Code-Coverage Analysis

You have learned how to use unit tests to test your code. But how do you test your tests? How do you find code that is not yet testedor, in other words, not yet covered by a test? How do you measure testing completeness? All these questions are answered by a practice called code-coverage analysis. Code-coverage analysis gives you an insight into what parts of the production code are executed when the tests are run.

 

PHPUnit's code-coverage analysis utilizes the statement coverage functionality provided by the Xdebug[6] extension. An example of what statement coverage means is that if there is a method with 100 lines of code, and only 75 of these lines are actually executed when tests are being run, then the method is considered to have a code overage of 75 percent.

 

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

 

Figure 1 shows a code-coverage report for the BankAccount class (from Example 12) in HTML format generated by the PHPUnit command-line test runner's --coverage-html switch. Executable code lines are black; non-executable code lines are gray. Code lines that are actually executed are highlighted.

Figure 1-1. The BankAccount class, not completely covered by tests

 

The code-coverage report shows that we need to write tests that call setBalance( ), depositMoney( ), and withdrawMoney( ) with legal values in order to achieve complete code coverage. Example 14 shows tests that need to be added to the BankAccountTest test-case class to completely cover the BankAccount class.

 

Example 14. The BankAccount class, covered by tests

<?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( ));

  }

}

?>

 

 

 

In Figure 2, we see that the BankAccount class is now covered completely by tests.

 

In the "PHPUnit and Phing" section, later in this book, you will learn how to use Phing to generate more detailed code-coverage reports.

 

hold住php代码--代码覆盖率统计

如果你有这样的任务:负责php代码测试   如果你有这样的疑问:我设计的测试用例是否覆盖了本次php代码的修改?   如果你有这样的需求:我知道需要增加case,但是总感觉无地放矢,有些分支走了很多遍...
  • rongwenbin
  • rongwenbin
  • 2013年08月09日 17:37
  • 1091

PHPUnit单元测试

PHPUnit单元测试 一、概述 1. 什么是单元测试? 【百度百科】单元测试是对软件中的最小可测单元进行检查和验证。是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否...
  • u010889390
  • u010889390
  • 2016年03月15日 18:48
  • 3287

PHPUnit入门篇

PHPUnit是什么? 它是一款轻量级的php测试框架 为什么要用PHPUnit? 1. facebook在用 2. 可以通过命令操控测试脚本 3. 可以测试性能 4. 可以测试代码覆盖率...
  • fly_heart_yuan
  • fly_heart_yuan
  • 2011年11月22日 00:04
  • 18330

php代码覆盖率

一 php单元测试代码覆盖率   phpunit包含PHP_CodeCoverage组件,运行输出覆盖率结果。   运行phpunit 查看使用方法   Code Coverage Options: ...
  • qq_37023538
  • qq_37023538
  • 2017年04月07日 16:26
  • 804

Python 代码覆盖率统计工具 coverage.py

Python 代码覆盖率统计工具 coverage.py coverage.py是一个用来统计python程序代码覆盖率的工具。它使用起来非常简单,并且支持最终生成界面友好的html...
  • luoye7422
  • luoye7422
  • 2014年12月23日 22:16
  • 445

PHP 代码覆盖率分析

PHP代码覆盖率分析平台: Windows 2003 Server x64 内存: 2G软件需求: 1. PHP 5.0 或以上版本 2. Xdebug Zend扩展扩展 http://www.xde...
  • httpnet
  • httpnet
  • 2007年07月25日 15:28
  • 7125

PHPUnit袖珍指南-第一章 简介

第一章 简介很长时间里,我对“你什么时候会为PHPUnit写一个文档”这个问题的回答是:“你不需要PHPUnit文档,去读读JUnit文档或买一本Junit的书,试一试用PHP和PHPUnit来重写J...
  • summerfang
  • summerfang
  • 2006年05月20日 01:22
  • 5783

PHPUnit袖珍指南-概述

概述聪明的Web开发人员会告诉你,越快找到代码的错误,你就能越快修正它,长期而言,项目成本越低。好了,能最有效的检测PHP代码中的错误的工具是PHPUnit,一个开发源代码的框架,它在你不在的时候,自...
  • summerfang
  • summerfang
  • 2006年05月20日 01:18
  • 5004

Linux下代码覆盖率工具:gcov

Linux下代码覆盖率工具:gcov 对于C/C++软件开发,常常需要通过代码覆盖率报告来了解测试用例的场景覆盖情况,对于测试用例未覆盖的代码分支流程,需要补充用例,以保证测试用例的全面性与完整性,...
  • hanlizhong85
  • hanlizhong85
  • 2017年09月17日 13:34
  • 201

基于Jenkins 实现php项目的自动化测试、自动打包和自动部署

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://birdinroom.blog.51cto.com/7740375/1346812...
  • wang_quan_li
  • wang_quan_li
  • 2015年02月06日 16:43
  • 1237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHPUnit袖珍指南 第十章 代码覆盖率分析
举报原因:
原因补充:

(最多只允许输入30个字)