软件测试中测试用例详解

发表于:2010-04-26来源:作者:点击数: 标签:软件测试详解
软件测试中测试用例详解 在上篇文章中介绍了如何使用 PHP Unit进行 单元测试 ,现在我就来谈谈如何 编写测试用例 以及怎样保证测试的全面性。 通常的测试用例继承自 PHPUnit _Framework_ TestCase 类,其中的每个测试都以test开头,而且声明为公共类型public

软件测试中测试用例详解

在上篇文章中介绍了如何使用PHPUnit进行单元测试,现在我就来谈谈如何编写测试用例以及怎样保证测试的全面性。

通常的测试用例继承自PHPUnit_Framework_TestCase类,其中的每个测试都以test开头,而且声明为公共类型public。每个测试用例都有一个构建方法setUp()和拆除方法tearDown(),分别在每个测试执行之前和之后执行,这两个方法都声明为被保护类型protected。测试语句的类型包括断言、标记跳过、标记未完成。自动生成的测试类使用标记未完成来表示该测试未完成,在测试条件不满足的情况下要使用标记跳过,如测试Oracle数据库驱动时没有Oracle数据库环境、Linux下无法测试SQL Server数据库驱动等。测试结果包括成功、失败和错误。出现错误的结果说明你的代码中有语法或运行时错误,这些错误要首先被解决。

标记未完成

在开始写测试用例时,我们使用标记跳过来表示测试是未完成的,这样做和什么都不写的区别是后者会认为测试是成功的,而你可能会在之后忘了写测试。

PHP代码
  1. class UnitTest extends PHPUnit_Framework_TestCase  
  2. {  
  3.     /** 
  4.      * 测试Hello()方法 
  5.      */  
  6.     public function testHello()  
  7.     {  
  8.         $this->markTestIncomplete('这是一个未完成的测试');  
  9.     }  
  10. }  
  11. ?>  

标记跳过

使用标记跳过来跳过不满足测试条件的情况,避免出现错误而影响测试结果。

PHP代码
  1. class UnitTest extends PHPUnit_Framework_TestCase  
  2. {  
  3.     protected function setUp()  
  4.     {  
  5.         // 该测试用例需要xxx扩展,如果不满足就跳过  
  6.         if (!extension_loaded('xxx')) {  
  7.             $this->markTestSkipped('这是一个跳过的测试');  
  8.         }  
  9.     }  
  10. }  
  11. ?>  

断言

布尔类型
assertTrue   断言为真
assertFalse  断言为假

NULL类型
assertNull     断言为NULL
assertNotNull  断言非NULL

数字类型
assertEquals             断言等于
assertNotEquals          断言不等于
assertGreaterThan        断言大于
assertGreaterThanOrEqual 断言大于等于
assertLessThan           断言小于
assertLessThanOrEqual    断言小于等于

字符类型
assertEquals          断言等于
assertNotEquals       断言不等于
assertContains        断言包含
assertNotContains     断言不包含
assertContainsOnly    断言只包含
assertNotContainsOnly 断言不只包含

数组类型
assertEquals          断言等于
assertNotEquals       断言不等于
assertArrayHasKey     断言有键
assertArrayNotHasKey  断言没有键
assertContains        断言包含
assertNotContains     断言不包含
assertContainsOnly    断言只包含
assertNotContainsOnly 断言不只包含

对象类型
assertAttributeContains           断言属性包含
assertAttributeContainsOnly       断言属性只包含
assertAttributeEquals             断言属性等于
assertAttributeGreaterThan        断言属性大于
assertAttributeGreaterThanOrEqual 断言属性大于等于
assertAttributeLessThan           断言属性小于
assertAttributeLessThanOrEqual    断言属性小于等于
assertAttributeNotContains        断言不包含
assertAttributeNotContainsOnly    断言属性不只包含
assertAttributeNotEquals          断言属性不等于
assertAttributeNotSame            断言属性不相同
assertAttributeSame               断言属性相同
assertSame                        断言类型和值都相同
assertNotSame                     断言类型或值不相同
assertObjectHasAttribute          断言对象有某属性
assertObjectNotHasAttribute       断言对象没有某属性

class类型
class类型包含对象类型的所有断言,还有
assertClassHasAttribute          断言类有某属性
assertClassHasStaticAttribute    断言类有某静态属性
assertClassNotHasAttribute       断言类没有某属性
assertClassNotHasStaticAttribute 断言类没有某静态属性

文件相关
assertFileEquals     断言文件内容等于
assertFileExists     断言文件存在
assertFileNotEquals  断言文件内容不等于
assertFileNotExists  断言文件不存在

XML相关
assertXmlFileEqualsXmlFile        断言XML文件内容相等
assertXmlFileNotEqualsXmlFile     断言XML文件内容不相等
assertXmlStringEqualsXmlFile      断言XML字符串等于XML文件内容
assertXmlStringEqualsXmlString    断言XML字符串相等
assertXmlStringNotEqualsXmlFile   断言XML字符串不等于XML文件内容
assertXmlStringNotEqualsXmlString 断言XML字符串不相等

有返回值的方法或函数根据其类型选择相应的断言,下面是一个简单例子。

PHP代码
  1. class UnitTest extends PHPUnit_Framework_TestCase  
  2. {  
  3.     /** 
  4.      * 测试返回值为布尔类型 
  5.      */  
  6.     public function testReturnBool()  
  7.     {  
  8.         // 实际情况把TRUE和FALSE换为被测试方法或函数  
  9.         $this->assertTrue(TRUE);  
  10.         $this->assertFalse(FALSE);  
  11.     }  
  12.     /** 
  13.      * 测试返回值为字符串类型 
  14.      */  
  15.     public function testReturnString()  
  16.     {  
  17.         $expected = 'string';  
  18.         // 实际情况把下面的'string'换为被测试方法或函数  
  19.         $result = 'string';  
  20.         $this->assertEquals($expected$result);  
  21.     }  
  22.     /** 
  23.      * 测试返回值是数字类型 
  24.      */  
  25.     public function testReturnInt()  
  26.     {  
  27.         $expected = 10;  
  28.         // 实际情况把20换为被测试方法或函数  
  29.         $result = 20;  
  30.         $this->assertGreaterThan($expected$result);  
  31.     }  
  32.     /** 
  33.      * 测试返回值是数组类型 
  34.      */  
  35.     public function testReturnArray()  
  36.     {  
  37.         // 实际情况把$result赋值为被测试方法或函数  
  38.         $result = array('test' => 'hello');  
  39.         // 实际情况把'test'换为要测试的键名称  
  40.         $this->assertArrayHasKey('test'$result);  
  41.     }  
  42.     /** 
  43.      * 测试返回值是对象类型 
  44.      */  
  45.     public function testReturnObject()  
  46.     {  
  47.         // 实际情况把$this换为期望的对象  
  48.         $expected = $this;  
  49.         // 实际情况把$this换为被测试方法或函数  
  50.         $result = $this;  
  51.         $this->assertSame($expected$result);  
  52.     }  
  53. }  
  54. ?>  

原文转自:http://www.ltesting.net