逻辑怎么运行,如果状态的转换符合我们的行为设定,那验证结果显然是正确的,因此
在对一个对象进行单元测试的时候,我们需要对多数的状态转换进行分析和对照,从而
验证对象的行为。状态是通过一系列的状态数据来描述的,因此编写单元测试首先分析出
状态的变化过程(状态转换图对这个过程的描述非常清晰),然后根据状态的定义确定分
析的状态数据,最后是提供这些内部的状态数据的访问。在数据库连接池的例子中,我们
对池实现的对象 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,你应该在测试方法的最