2012-10-16 16 views
1

使用junit測試DAO'm,主要是我在hibernate中啓動事務,調用compare函數,然後回滾transaccion.El問題,如果我測試函數是一個事務錯誤,我不能去掉嵌套,我想過實現DBUnit xml的想法,但管理似乎並不是一個好主意,在這個例子中,我用這種方法做了足夠多的測試用例。 任何人有任何想法如何解決它,而不必使用除了Junit或休眠以外的任何東西?在Java中使用Junit4和Hibernate測試DAO

這是一個例子

@Test 
public void Test1GetByCodigo(){ 
    String cod = "999999999"; 
    DBTenant dbTenant = null; 
    Session sess = null; 
    Transaction trans = null; 
    ClienteBO cli = null; 
    Clientes clie = null; 
    try{ 
     try{ 
      dbTenant = new DBTenant(); 
      sess = dbTenant.getTenantSession(); 
      trans = sess.beginTransaction(); 
     } 
     catch(Exception e){ 
      fail("Error en la carga de la transaccion.Quedo alguna transaccion abierta?"); 
     } 
     clie = CargaCliente(cod); 
     sess.save(clie); 
     cli = cliBL.getByCodigo(cod); 
    } 
    catch(Exception e){ 
     trans.rollback(); 
     dbTenant.closeSession(); 
     fail("Error la carga del cliente.Se modifico la bse de datos Clientes??"); 
    } 
    trans.rollback(); 
    sess.clear(); 
    dbTenant.closeSession(); 
    ClienteBO clieEsp = CargaClienteBO(clie); 
    assertNotNull(clieEsp); 
    assertNotNull(cli); 
    assertEquals("Error el cliente no coincide",clieEsp,cli); 
} 

如果cliBL.getbycodigo()函數tubiera交易將有一個錯誤,謝謝你的幫助,感謝

+0

如果cliBL.getbycodigo()函數有交易將有一個bug,謝謝你的幫助,感謝 –

+0

對我使用的HibernateUtil創建SessionFactory的。 HibernateUtil在應用程序的正常運行期間工作正常,但是當我嘗試運行JUnit4測試時,它給出了ExceptionInInitializer錯誤。請幫忙。 –

+0

您可以請分享您的DBTenant代碼。 –

回答

0

設置爲這個測試使用Hibernate的內存數據庫並讓junit測試儘可能多地使用交易。因爲數據庫是在測試之前創建的,之後被拋棄,所以隔離沒有問題。這article可能有助於