测试用例详解(4)

发表于:2014-08-01来源:uml.org.cn作者:nonultimate点击数: 标签:测试用例
} } return $url; } ? PHP代码 require_once functions.php; class functionsTest extends PHPUnit_Framework_TestCase { /** * 确认url()返回预期的字符串 */ public function testurl() { define(, in

  }

  }

  return $url;

  }

  ?>

  PHP代码

  require_once 'functions.php';

  class functionsTest extends PHPUnit_Framework_TestCase

  {

  /**

  * 确认url()返回预期的字符串

  */

  public function testurl()

  {

  define('', 'index.php');

  C('VAR_MODULE', 'module');

  C('VAR_ACTION', 'action');

  C('VAR_ROUTER', 'route');

  // 测试通常模式URL

  $uri = url('Index', 'Home', '', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php?module=Home&action=Index&q=test&msg=OK', $uri);

  // 测试通常模式路由

  $uri = url('Index', 'Home', 'default', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php?route=default&q=test&msg=OK', $uri);

  C('DISPATCH_ON', true);

  C('URL_MODEL', 1);

  C('PATH_MODEL', 1);

  // 测试普通PATHINFO模式URL

  $uri = url('Index', 'Home', '', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php/module/Home/action/Index/q/test/msg/OK', $uri);

  // 测试普通PATHINFO模式路由

  $uri = url('Index', 'Home', 'default', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php/route/default/q/test/msg/OK', $uri);

  C('PATH_MODEL', 2);

  C('PATH_DEPR', '/');

  // 测试智能PATHINFO模式URL

  $uri = url('Index', 'Home', '', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php/Home/Index/q/test/msg/OK', $uri);

  // 测试智能PATHINFO模式路由

  $uri = url('Index', 'Home', 'default', APP_NAME, array('q' => 'test', 'msg' => 'OK'));

  $this->assertEquals('index.php/default/q/test/msg/OK', $uri);

  }

  }

  ?>

  异常测试

  有时程序执行了非法操作而抛出异常,我们需要模拟某个异常,然后捕捉它是否触发了该异常。

  PHP代码

  class UnitTest extends PHPUnit_Framework_TestCase

  {

  /**

  * 测试异常

  */

  public function testException()

  {

  // 期望Exception异常

  $this->setExpectedException('Exception');

  // 抛出Exception异常

  throw new Exception('TestException');

  }

  }

  ?>

  输出测试

  有时某个方法并不返回而输出某些内容,我们需要继承PHPUnit_Extensions_OutputTestCase类来捕捉输出内容。PHPUnit默认不载入扩展类,需要自己加载。

  PHP代码

  // 载入输出测试用例扩展

  require_once 'PHPUnit/Extensions/OutputTestCase.php';

  class UnitTest extends PHPUnit_Extensions_OutputTestCase

  {

  /**

  * 测试输出

  */

  public function testOutput()

  {

  // 期望输出的内容是字符串 'Hello'

  $this->expectOutputString('Hello');

  // 输出 'Hello'

  echo 'Hello';

  }

  }

  ?>

  数据库测试

  PHPUnit的数据库测试并不完善,只提供了assertTablesEqual和assertDataSetsEqual两个断言与 createFlatXMLDataSet和createXMLDataSet创建XML数据集的方法。无法进行全面的数据操作测试,建议使用 DBUnit。

  附录

  PHPUnit断言参考

  assertArrayHasKey($key, array $array, $message = '')

  assertArrayNotHasKey($key, array $array, $message = '')

  assertAttributeContains($needle, $haystackAttributeName, $haystackClassOrObject, $message = '')

  assertAttributeContainsOnly($type, $haystackAttributeName, $haystackClassOrObject, $isNativeType = NULL, $message = '')

原文转自:http://www.uml.org.cn/Test/200910169.asp