background image

逻辑怎么运行,如果状态的转换符合我们的行为设定,那验证结果显然是正确的,因此
在对一个对象进行单元测试的时候,我们需要对多数的状态转换进行分析和对照,从而
验证对象的行为。状态是通过一系列的状态数据来描述的,因此编写单元测试首先分析出
状态的变化过程(状态转换图对这个过程的描述非常清晰),然后根据状态的定义确定分
析的状态数据,最后是提供这些内部的状态数据的访问。在数据库连接池的例子中,我们
对池实现的对象 DefaultConnectionProxy 的状态变换进行分析后,我们决定把表征状
态的 OracleConnectionCacheImpl 对象公开给测试类。参见示例一
  1 示例一
  2 /**
  3 * 这个类简单的包装了 oracle 对数据连接缓冲池的实现。
  4 * 
  5 */
  6 public class DefaultConnectionProxy extends ConnectionProxy {
  7     private static final String name = "Default Connection Proxy";
  8     private static final String description = "这个类简单的包装了 oracle 对数据
连接缓冲池的实现。";
  9     private static final String author = "Ion-Global.com";
10     private static final int major_version = 0;
11     private static final int minor_version = 9;
12     private static final boolean pooled = true;
13      private ConnectionBroker connectionBroker = null;
14     private Properties props;
15     private Properties propDescriptions;
16     private Object initLock = new Object();
17     // Test Code Begin...
18     /* 为了能够了解对象的状态变化,因此需要把表征对象内部状态变化的部分私有
变量提供公共的访问接口
19    (或者提供让同一个类包的访问接口),以便使测试单元可以有效地判断对象的状
态转变,
20     在本示例中对包装的 OracleConnectionCacheImpl 对象提供访问接口。
21     */
22     OracleConnectionCacheImpl getConnectionCache() {
23         if (connectionBroker == null) {
24             throw new IllegalStateException("You need start the server first.");
25         }
26         
27         return connectionBroker.getConnectionCache();
28     }
29     // Test Code End...
30 在公开内部状态数据後,我们就可以编写我们的测试单元了,单元测试的选择方法和
选择尺度已经在本文前面章节进行了说明,
31 但是仍然需要注意的是,由于 assert 方法会抛出一个 error,你应该在测试方法的最