亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

您的位置:軟件測試 > 開源軟件測試 > 開源單元測試工具 >
對DAO編寫單元測試
作者:網絡轉載 發布時間:[ 2013/2/19 15:12:51 ] 推薦標簽:

  注意DatabaseFixture的createProxy()方法,它將一個普通的DAO對象包裝為在事務范圍內執行的代理對象,即對于一個普通的DAO對象的方法調用前后,自動地開啟事務并根據異常情況提交或回滾事務。

  下面是UserDaoImpl的單元測試類:

 public class UserDaoImplTest extends DatabaseFixture {

  private UserDao userDao =  new UserDaoImpl();

  private UserDao proxy =  (UserDao)createProxy(userDao);
 @Test

  public void  testQueryUser() {

  User user =  newUser("test");

  proxy.createUser(user);

  User t =  proxy.queryUser("test");

  assertEquals(user.getEmail(), t.getEmail());

  }

  }
 

  注意到UserDaoImplTest持有兩個UserDao引用,userDao是普通的UserDaoImpl對象,而proxy則是將userDao進行了事務封裝的對象。

  由于UserDaoImplTest從DatabaseFixture繼承,因此,@Before方法在每個@Test方法調用前自動調用,這樣,每個@Test方法執行前,數據庫都是一個經過初始化的“干凈”的表。

  對于普通的測試,如UserDao.queryUser()方法,直接調用proxy.queryUser()即可在事務內執行查詢,獲得返回結果。

  對于異常測試,例如期待一個ResourceNotFoundException,不能直接調用proxy.queryUser()方法,否則,將得到一個UndeclaredThrowableException:

  對DAO編寫單元測試 圖-3

  這是因為通過反射調用拋出的異常被代理類包裝為UndeclaredThrowableException,因此,對于異常測試,只能使用原始的userDao對象配合TransactionCallback實現:

 @Test(expected=ResourceNotFoundException.class)

  public void testQueryNonExistUser() throws Exception {

  new TransactionCallback()  {

  protected Object  doInTransaction() throws Exception {

  userDao.queryUser("nonexist");

  return null;

  }

  }.execute();

  }
 

  到此為止,對DAO組件的單元測試已經實現完畢。下一步,我們需要使用HibernateTool自動生成數據庫腳本,免去維護SQL語句的麻煩。相關的Ant腳本片段如下:

 <target name="make-schema" depends="build"  description="create schema">

  <taskdef  name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask">

  <classpath  refid="build-classpath"/>

  </taskdef>

  <taskdef  name="annotationconfiguration"  classname="org.hibernate.tool.ant.AnnotationConfigurationTask">

  <classpath  refid="build-classpath"/>

  </taskdef>

  <annotationconfiguration  configurationfile="$/hibernate.cfg.xml"/>

  <hibernatetool  destdir="$">

  <classpath  refid="build-classpath"/>

  <annotationconfiguration  configurationfile="$/hibernate.cfg.xml"/>

  <hbm2ddl

  export="false"

  drop="true"

  create="true"

  delimiter=";"

  outputfilename="schema.sql"

  destdir="$"

  />

  </hibernatetool>

  </target>
 

  完整的Ant腳本以及Hibernate配置文件請參考項目工程源代碼。

  利用HSQLDB,我們已經成功地簡化了對DAO組件進行單元測試。我發現這種方式能夠找出許多常見的bug:

    HQL語句的語法錯誤,包括SQL關鍵字和實體類屬性的錯誤拼寫,反復運行單元測試可以不斷地修復許多這類錯誤,而不需要等到通過Web頁面請求而調用DAO時才發現問題;
    傳入了不一致或者順序錯誤的HQL參數數組,導致Hibernate在運行期報錯;
    一些邏輯錯誤,包括不允許的null屬性(常常由于忘記設置實體類的屬性),更新實體時引發的數據邏輯狀態不一致。

  總之,單元測試需要根據被測試類的實際情況,編寫簡單有效的測試用例。本文旨在給出一種編寫DAO組件單元測試的有效方法。

上一頁1234下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 免费网站看v片在线播放器 免费无毒片在线观看 | 日韩精品一区二区三区中文在线 | 日本黄色免费网址 | 在线观看国产wwwa级羞羞视频 | 97国产在线视频公开免费 | www.免费黄色 | 黄色免费在线观看网址 | 日本久久精品免视看国产成人 | 永久免费毛片手机版在线看 | 日韩精品福利 | 国产日韩在线观看视频 | 中国女人三级在线播放 | 欧美黑人巨大硬xxx猛性 | 日韩综合 | 日韩欧美亚洲国产一区二区三区 | 一个人免费观看日本www视频 | 天天色综合天天 | 日韩三级黄色 | 99re在线视频观看 | 日日干日日干 | 狠狠色成人综合 | 涩涩视频www在线观看入口 | 亚洲精品高清在线 | 日本午夜精品 | 天天综合网色 | 国产精品页 | 青娱乐伊人 | 免费观看黄a一级视频 | 91亚洲精品自在在线观看 | 精品国产综合成人亚洲区 | 久在线| 久久亚洲国产精品一区二区 | 日日狠狠久久偷偷四色综合免费 | 欧美色爽 | 免费在线观看你懂的 | 国产成人精品一区 | 精品国产成人高清在线 | 免费看的黄色小视频 | 国产日韩亚洲不卡高清在线观看 | 欧美日本不卡 | 男人边吃奶边爱边做视频刺激 |