2011-09-15 7 views
8

Me gusta escribir JUnits para mis implementaciones de hibernación dao y buscar opinión sobre el enfoque sugerido para escribir estas pruebas de unidad. Puedo pensar en dos estrategias.Prueba de la unidad hibernate daos con resorte

  • Burlándose de la plantilla de hibernación usando una biblioteca como EasyMock y probar sólo la aplicación de DAO en contra de estos simulacros de objetos. (No es realmente satisfactorio ya que estaría probando contra una capa falsa y no realmente contra datos de prueba)

  • Probando contra una base de datos de prueba real (una en memoria/externa) escribiendo algunos datos de prueba antes de ejecutar mi prueba de unidad.

¿Qué enfoque es una buena forma de garantizar que nuestros DAO se prueben adecuadamente? Por favor, remítame a algunos ejemplos sobre cómo configurar pruebas usando el segundo enfoque. Traté de mirar alrededor pero no encontré los correctos.

Gracias, Siva.

+1

sólo quería añadir en el comentario de Augusto que u puede utilizar DBUnit para poblar la base de datos de prueba con los datos de consulta contra. – jwmajors81

Respuesta

5

Seguiría la segunda vía, usando HSQLDB como motor de DB. Creo que invocar la implementación real detrás de un DAO tiene el efecto positivo de detectar errores de mapeo.

Si sus DAO tienen más lógica que no está relacionada con hibernación (imagínese si DAO carga algunos objetos y luego realiza algunas operaciones sobre ellos para devolver un objeto diferente), crearía una clase de prueba diferente para probar el métodos con lógica extra, y se burlan de los métodos que devuelven los datos. Esto le permite configurar los datos de una manera más fácil en lugar de cebar el DB e inmediatamente cargar esos objetos.

3

Prueba contra una base de datos real. La mayor parte de la complejidad de Hibernate está en el mapeo, y si te burlas de SessionFactory (o de lo que lo encapsula), echas de menos la prueba por completo. Use el Spring Test Framework, para facilitar enormemente sus pruebas, y para las pruebas locales de "unidad", pruebe contra una base de datos en memoria. H2 es simple de usar y muy rápido (mejor que HSQLDB o Derby). Ej .:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("your test context.xml") 
public class FooDaoTest { 
    @Autowired 
    private FooDao dao; 

    @Transactional 
    public void saveFoo_succeeds() { 
     // test save 
    } 

    @Transactional 
    public void saveAndLoadFoo_resultsInSameFieldValues() { 
     // save and load; compare fields from before to after 
    } 

    // test custom queries 
}