Chinaunix首页 | 论坛 | 博客
  • 博客访问: 685474
  • 博文数量: 132
  • 博客积分: 10060
  • 博客等级: 上将
  • 技术积分: 1732
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-21 12:35
个人简介

迷惘的码农。

文章分类

全部博文(132)

文章存档

2013年(1)

2011年(2)

2010年(9)

2009年(41)

2008年(79)

我的朋友

分类:

2008-03-26 09:34:37

第 7 章 组织测试套件

PHPUnit的目标(见)之一是测试应是可组合的:我们应能同时运行任意数量或任意组合的测试,例如整个工程的所有测试,或者工程局部组件的所有类的测试,或者只是单个类的测试。

PHPUnit框架的PHPUnit_Framework_TestSuite类允许我们将一些测试组织在若干测试套件构成的一个层次结构中。让我们通过一个例子看看PHPUnit特有的测试套件。

显示一个删节版本的Tests/AllTests.php,显示一个删节版本的Tests/Framework/AllTests.php

范例 7.1: 类AllTests


if (!defined('PHPUnit_MAIN_METHOD')) {
    define('PHPUnit_MAIN_METHOD', 'AllTests::main');
}
 
require_once 'PHPUnit/Framework.php';
require_once 'PHPUnit/TextUI/TestRunner.php';
 
require_once 'Framework/AllTests.php';
// ...
 
class AllTests
{
    public static function main()
    {
        PHPUnit_TextUI_TestRunner::run(self::suite());
    }
 
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('PHPUnit');
 
        $suite->addTest(Framework_AllTests::suite());
        // ...
 
        return $suite;
    }
}
 
if (PHPUnit_MAIN_METHOD == 'AllTests::main') {
    AllTests::main();
}
?>

范例 7.2: 类Framework_AllTests


if (!defined('PHPUnit_MAIN_METHOD')) {
    define('PHPUnit_MAIN_METHOD', 'Framework_AllTests::main');
}
 
require_once 'PHPUnit/Framework.php';
require_once 'PHPUnit/TextUI/TestRunner.php';
 
require_once 'Framework/AssertTest.php';
// ...
 
class Framework_AllTests
{
    public static function main()
    {
        PHPUnit_TextUI_TestRunner::run(self::suite());
    }
 
    public static function suite()
    {
        $suite = new PHPUnit_Framework_TestSuite('PHPUnit Framework');
 
        $suite->addTestSuite('Framework_AssertTest');
        // ...
 
        return $suite;
    }
}
 
if (PHPUnit_MAIN_METHOD == 'Framework_AllTests::main') {
    Framework_AllTests::main();
}
?>

Framework_AssertTest是个扩展了PHPUnit_Framework_TestCase的标准测试用例。

运行Tests/AllTests.php则使用TextUI测试启动器运行全部测试,然而运行Tests/Framework/AllTests.php则只运行类PHPUnit_Framework_*的测试。

只有像这样运行测试才会调用类AllTests中声明的main()方法:

php AllTests.php
PHPUnit 3.2.10 by Sebastian Bergmann.

............................................................ 60 / 227
............................................................ 120 / 227
............................................................ 180 / 227
.........................SSSSSS................

Time: 4 seconds


OK, but incomplete or skipped tests!
Tests: 227, Skipped: 6.

运行phpunit AllTests来启动测试不会调用main()方法。

套件级装配器

PHPUnit_Framework_TestSuite提供两个模板方法,setUp()tearDown(),它们分别在测试套件的首个测试前和最后测试后被调用。

范例 7.3: 类MySuite


require_once 'MyTest.php';
 
class MySuite extends PHPUnit_Framework_TestSuite
{
    public static function suite()
    {
        return new MySuite('MyTest');
    }
 
    protected function setUp()
    {
        print "\nMySuite::setUp()";
    }
 
    protected function tearDown()
    {
        print "\nMySuite::tearDown()";
    }
}
?>

中,被加入测试套件MySuite中的测试用例类MyTest有两个测试方法,testOne() and testTwo(),以及方法setUp()tearDown()。输出显示了这八个方法的调用顺序:

MySuite::setUp()
MyTest::setUp()
MyTest::testOne()
MyTest::tearDown()
MyTest::setUp()
MyTest::testTwo()
MyTest::tearDown()
MySuite::tearDown()

通过类PHPUnit_Framework_TestSuitesetUp()方法存储在$this->sharedFixture中的变量,能作为$this->sharedFixture在测试套件对象聚集的所有的测试中使用(见)。

阅读(1714) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~