文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第 21 章 PHPUnit的执行

第 21 章 PHPUnit的执行

时间:2008-04-07  来源:hshq_cn


                第 21 章 PHPUnit的执行
    PHPUnit的执行有点不常见,利用了在一般应用代码中难以维护的技术。理解PHPUnit如何运行你的测试有助于编写它们。
  
    单个测试被表现为一个PHPUnit_Framework_Test对象,而且需要一个PHPUnit_Framework_TestResult对象来运行。PHPUnit_Framework_TestResult对象被传入PHPUnit_Framework_Test对象的run()方法中,它运行实际的测试方法并向PHPUnit_Framework_TestResult对象报告所有的异常。这是个来自Smalltalk世界的特性,称为聚集参数(Collecting Parameter)。它建议当你需要跨越多个方法收集结果时(在我们的案例中是若干对用于各种测试的run()方法的调用结果),你应该像方法加入一个参数并传递一个将为你收集结果的对象。查阅Erich Gamma和Kent Beck的文章“JUnit: A Cook's Tour”
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#GammaBeck1999][GammaBeck1999][/url]
和Kent Beck的“Smalltalk Best Practice Patterns”
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#Beck1997][Beck1997][/url]

  
    要进一步理解PHPUnit如何运行你的测试,考虑
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#implementation.examples.EmptyTest.php]范例 21.1[/url]
中的测试用例类。
  
范例 21.1: EmptyTest类
require_once 'PHPUnit/Framework.php';

class EmptyTest extends PHPUnit_Framework_TestCase
{
    private $emptyArray = array();

    public function testSize()
    {
        $this->assertEquals(0, sizeof($this->emptyArray));
    }

    public function testIsEmpty()
    {
        $this->assertTrue(empty($this->emptyArray));
    }
}
?>
    当测试运行时,PHPUnit做的第一件事情是把测试类转变为一个PHPUnit_Framework_Test对象——此时,PHPUnit_Framework_TestSuite包含两个EmptyTest实例,如
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#implementation.figures.EmptyTest-before.png]图 21.1[/url]
中所示。
  
图 21.1. 即将被运行的测试


    当PHPUnit_Framework_TestSuite运行时,它依次运行每个EmptyTest。每次都运行它独有的setUp()方法,为每个测试创建一个新的$emptyArray,如
[url=file:///F:/data2/PHPUnit_Pocket_Guide_-_v32/index_cn.html#implementation.figures.EmptyTest-after.png]图 21.2[/url]
中所示。使用这种方式,如果一个测试修改数组,其他测试不受影响。即使变为全局和超全局(如$_ENV)变量也不影响其他测试。
  
图 21.2. 运行后的测试,各自带有自己特有的fixture


    简而言之,测试运行时一个测试用例类导致一个两级的对象树。每个测试方法作用于其专有的通过setUp()创建的对象拷贝。结果是测试能够完全独立地运行。
  
    要运行测试方法自身,PHPUnit使用反射在实例变量$name中查找方法名并调用它。这是另一个特性,称为插件式选择器(Pluggable Selector),通常用于Smalltalk世界。利用插件式选择器使得编写测试更简单,但也要付出代价:你不能根据代码来判定某方式是否被调用了,必须在运行时察看数据值。
  
               
               
               
               
               

相关阅读 更多 +
排行榜 更多 +
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
火线反恐部队 v1.2 安卓版

火线反恐部队 v1.2 安卓版

飞行射击 下载