熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JBuilder2005單元測試之創建測試固件

2013-11-23 18:43:27  來源: Java核心技術 

  在測試用例中通過setUp()tearDown()創建測試固件只能使這個測試固件在單個測試用例的不同測試方法中共用如果有多個測試用例都需要使用相同的測試固件就需要將測試固件抽取到一個獨立的類中JBuilder提供了個預定義的測試固件類它們分別是
  
  ·JDBC測試固件(JDBC Fixture)用於獲取數據庫連接的測試固件用戶僅需要通過設置一些數據庫信息就可以用方便的方法獲取數據連接
  
  ·JNDI 測試固件(JNDI Fixture)用於模擬從JDNI環境中獲取對象的測試固件
  
  ·比較測試固件(Comparision Fixture)將測試輸出到外部文件中以便第二次測試時進行比較
  
  ·自定義測試固件(Custom Fixture)用戶自定義的測試固件
  
  如果對JUnit的框架結構非常了解也許這些JBuilder擴展的測試固件對你來說意義並不大它們無非是構建一些常見的測試環境罷了你完全可以自己編寫在本節裡我們介紹兩個測試固件
  
  JDBC測試固件
  
  如果你的工程中已經有一個獲取數據連接的公共類你也有必要構建一個JDBC測試固件因為JDBC測試固件不但可以直接通過創建測試用例的向導直接指定此外JDBC測試固件還提供了許多面向測試的方法
  
  為了創建JDBC測試固件我們先創建一個JDataStore的數據庫其數據文件位於/db/hrjds這個數據庫的用戶名和密碼是sysdba/hrjds數據庫中有一張EMPLOYEE的表其結構如下所示
   
  EMPLOYEE有個字段分別是IDNAME和AGE分別是StringString和int類型並按上圖所示填入條記錄
  
  為了演示JDBC測試固件的具體使用我們設計兩個業務類Employee和EmployeeDAO爾後用JDBC測試固件為測試EmployeeDAO提供數據連接這兩個類的代碼如下
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字Employeejava類
  
   package chapterdb;
   public class Employee
   {
    private String id;
    private String name;
    private int age;
    public Employee(String id String name int age) {
     thisid = id;
     thisname = name;
    thisage = age;
    }
    public String getId() {
     return id;
    }
    public String getName() {
     return name;
    }
    public int getAge() {
     return age;
    }
    public boolean equals(Object o) {
     if (o instanceof Employee) {
      Employee e = (Employee) o;
      return idequals(egetId()) && nameequals(egetName()) &&age == egetAge();
     } else {
      return false;
     }
    }
   }
  
  Employee類用於描述EMPLOYEE表的一條記錄該類訪問數據庫的EmployeeDAO代碼如下所示
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字EmployeeDAOjava類
  
   package chapterdb;
   import javasql*;
   public class EmployeeDAO
   {
    private Connection conn;
    public EmployeeDAO(Connection conn) {
     nn = conn;
    }
    public Employee findById(String id) throws SQLException
    {
     String sqlStr = select * from employee where id =+id+;
     Statement stat = conncreateStatement();
     ResultSet rs = statexecuteQuery(sqlStr);
     if (rsnext()) {
      return new Employee(idrsgetString(name)rsgetInt(age));
     }else{
      return null;
     }
    }
   }
  
  為了節省篇幅我們僅提供一個訪問數據庫的訪問方法findById()即通過id查找Employee對象
  
  下面我們利用JBuilder向導創建一個JDBC測試固件
  
  . File>New>Test>在Test頁中雙擊JDBC Fixture圖標啟動創建向導其對話框如下所示
   educitycn/img_///jpg>
  在Class name中為JDBC測試固件指定類名HrJdbcFixture接受其他的默認設置按Next到下一步
  
  .設置連接數據庫的信息
  
  在這步裡JBuilder提供了大部分數據庫驅動程序的選擇和連接信息設置其對話框如下所示
   educitycn/img_///jpg>
  ·Driver選擇borlanddatabstorejdbcDataStoreDriver類JDBC測試固件提供了對大多數數據庫的支持其中下拉框中暫不可用的數據庫驅動器類顯示為紅色你可以通過配置工程擴展類庫使它們可用
  
  ·URL點擊其後的…按鈕彈出Create URL for DataStore對話框如下圖所示
   educitycn/img_///jpg>
  該對話框的設置內容會隨著數據庫類型的不同而變化對於JDataStore數據庫該對話框提供了兩個選項如果數據庫文件放在本機上時用第一個設置項否則用第二個設置項我們選擇第一種選項點擊其後的…按鈕導航到工程目錄>/db/hrjds並選擇之按OK返回向導主對話框窗口
  
  ·User namesysdba
  
  ·Password
  
  按對話框下的Test Connection測試連接應該會返回一個Success信息報告連接測試成功按Finish創建JDBC 測試固件其代碼如下所示
  
  代碼清單 錯誤!文檔中沒有指定樣式的文字HrJdbcFixturejava
  
   package fixture;
   import javasql*;
   import javaio*;
   import comborlandjbuilderunittestJdbcFixture;
   public class HrJdbcFixture
   extends JdbcFixture
   {
    public HrJdbcFixture(Object obj) {
     super();
    supersetUrl(jdbc:borland:dslocal:D:/JTJB/chapter/db/hrjds);
    supersetDriver(comborlanddatastorejdbcDataStoreDriver);
    supersetUsername(sysdba);
    supersetPassword();
   }
  
   public void setUp() {
    supersetUp();
   }
  
   public void tearDown() {
     supertearDown();
    }
   }
  
  JDBC測試固件承繼了comborlandjbuilderunittestJdbcFixture這個類的重要方法包括
  
  ·dumpResultSet()將一個ResultSet導到一個Writer中該方法接受兩個參數一個是ResultSet另一個是Writer
  
  ·getConnection()獲取一個數據連接
  
  ·runSqlBuffer()執行緩存於StringBuffer對象中的SQL語句
  
  ·runSqlFile()執行保存在文件中的SQL語句通過入參指定SQL文件的地址
  
  ·setDriver()設置JDBC驅動器
  
  ·setUrl()設置數據連接的URL
  
  ·setUsername()設置用戶名
  
  ·setPassword()設置密碼
  
  提示
  
  通過向導創建JDataStore的JDBC測試固件雖然可以直接在對話框中選擇comborlanddatastorejdbcDataStoreDriver驅動器但運行這個JDBC測試固件時JBuilder卻報這樣的錯誤信息javalangClassNotFoundException: comborlanddatastorejdbcDataStoreDriver原來是JBuilder通過向導創建JDBC測試固件時並沒有直接將驅動器類加載到工程類庫中所以你需要手工通過Project>Project Properties>Paths中將JBuilder類庫中名為JDataStore類庫項加到工程類庫中
  
  由於EMPLOYEE表的數據可能會隨著測試的進行不斷更改這樣在測試時測試規則就很難制定因為規則的制定必須基於一個假設的環境舉個例子我們現在要測試findById()方法就必須知道EMPLOYEE表中有哪些數據所以在測試開始時就必須創建好一些特定的數據由於JDBC固件可以執行保存在外部文件中的SQL所以我們創建一個insertsql文件將其放置在工程目錄>/db/insertsql下文件的內容如下
  
  delete from employee;insert into employee values(大山);insert into employee values(英華);insert into employee values(柯明);
  
  運行這個SQL語句時先清空EMPLOYEE表中的數據然後再插入條特定的記錄下面我們來創建應用JDBC測試固件的TestEmployeeDAO測試用例類
  
  .在編輯器中激活EmployeeDAO
  
  .File>New>Test>雙擊Test Case圖標啟動創建測試用例的向導在向導第步為EmployeeDAO的創建一個名為TestEmployeeDAO的測試用例這個測試用例對EmployeeDAO的findById()方法進行功能測試
  
  .在向導的第步選擇測試固件在向導對話框中我們前面創建的HrJdbcFixture已經出現在列表中你也可以通過對話框的Add和Remove選擇不同的測試固件
   
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25627.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.