2012-10-16 15 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可能有助于