为了给 readABC( ) 编写单元测试,我们需要一个 Connector 对象、一个 Statement 对象和一个 ResultSet 对象。Connector、 Statement 和 ResultSet 都是 java.sql 数据包中已设定的接口。特定的数据库系统提供这些接口的具体实现。readABC( ) 方法不需要依赖任何特定的数据库系统。我们的测试应该也不需要。事实上,我们可能也没有选定的数据库软件。既然测试里的方法写在接口中,我们可以为我们测试的每一个接口创建一个模拟对象。
让我们以被传递到方法之中的 Connection 对象为出发点。我们调用的唯一的 Connection 方法是 createStatement( )。但是我们的 Connection 必须完成定义在 Connection 接口中的所有方法。使用 Eclipse 创建这样一个对象很简单。我们按照以下步骤执行:
在 Eclipse 中创建一个完成 Connection 接口的新类(称它为 MockConection),检查为继承的抽象方法产生桩模块的选项(见图2)。Eclipse 为非 void 的方法产生带有默认返回值的新类。如果返回值是一个对象,默认为空值。
找到那些以测试里的方法命名的方法,并提供一个行为像真实对象那样的实现。
在模拟对象里添加方法,使得您的测试正确地初始化。
图2:从接口创建一个模拟对象类
为了实现我们的方法版本,我们需要一个对象来实现 Statement 接口。我们将按照上面的第一步创建一个默认值,称作 MockStatement。现在我们可以执行经过简单变换的方法: