El DA de primavera ayuda a escribir DAO. Al utilizar iBATIS como marco de persistencia y al extender SqlMapClientDaoSupport, se debe establecer un simulacro de SqlMapClient para el DAO, pero no puedo hacerlo. SqlMapClientTemplate no es una interfaz y EasyMock no puede crear un simulacro para ello.Cómo probar un DAO de unidad que se extiende SqlMapClientDaoSupport
Respuesta
¡Las pruebas DAO y unitarias no se llevan bien! Eso no tiene sentido para burlarse de algo en un componente que no tiene ninguna lógica comercial y se centra en el acceso a la base de datos. Debería intentar escribir una prueba de integración. Eche un vistazo a la documentación de referencia de primavera, capítulo 8.3: http://static.springframework.org/spring/docs/2.5.x/reference/testing.html
Pruebe Mockito. Permite clases simuladas, no solo interfaces.
Esta razón exacta es por qué no extiendo de SqlMapClientDaoSupport
. En cambio, inyecto una dependencia al SqlMapClientTemplate
(escrito como la interfaz SqlMapClientOperations
). He aquí un ejemplo de Primavera 2.5:
@Component
public class MyDaoImpl implements MyDao {
@Autowired
public SqlMapClientOperations template;
public void myDaoMethod(BigInteger id) {
int rowcount = template.update("ibatisOperationName", id);
}
}
Y otra razón por la cual la Composición es mejor que la Herencia. –
Como @Banengusk sugirió - esto se puede lograr con Mockito. Sin embargo, es importante establecer que su DAO utilizará un resorte SqlMapClientTemplate
que envuelva su simulacro SqlMapClient
. De hecho, SqlMapClientTemplate
delega invocaciones al SqlMapSession
en la capa IBatis.
Por lo tanto se requiere alguna configuración simulada adicional:
mockSqlMapSession = mock(SqlMapSession.class);
mockDataSource = mock(DataSource.class);
mockSqlMapClient = mock(SqlMapClient.class);
when(mockSqlMapClient.openSession()).thenReturn(mockSqlMapSession);
when(mockSqlMapClient.getDataSource()).thenReturn(mockDataSource);
dao = new MyDao();
dao.setSqlMapClient(mockSqlMapClient);
Podemos entonces verificar el comportamiento de este modo:
Entity entity = new EntityImpl(4, "someField");
dao.save(entity);
ArgumentCaptor<Map> params = ArgumentCaptor.forClass(Map.class);
verify(mockSqlMapSession).insert(eq("insertEntity"), params.capture());
assertEquals(3, params.getValue().size());
assertEquals(Integer.valueOf(4), params.getValue().get("id"));
assertEquals("someField", params.getValue().get("name"));
assertNull(params.getValue().get("message"));
- 1. ¿Cómo probar la unidad?
- 2. ¿Clase que se extiende?
- 3. clase interna que se extiende
- 4. ¿Cómo probar la unidad NSCoding?
- 5. Cómo probar el servicio de unidad que está utilizando PetaPoco.Database
- 6. Cómo probar el código de unidad con muy pocas unidades
- 7. Cómo probar el código de unidad que usa HostingEnvironment.MapPath
- 8. ¿Cómo puedo probar la unidad de algo que utiliza VisualTreeHelper?
- 9. ¿Cómo probar los controladores de unidad que usan springSecurityService?
- 10. Cómo probar las subclases de la unidad
- 11. Imagen de fondo que se extiende
- 12. Cómo probar la unidad de análisis JSON
- 13. ¿Cómo debo probar la unidad de un generador de código?
- 14. ¿Cómo probar la unidad de su API?
- 15. ¿Cómo puedo probar la unidad de un servicio de Windows?
- 16. ¿Cómo probar "agregar" en DAO sin usar "buscar", etc.?
- 17. Cómo probar las clases abstractas de unidad
- 18. ¿Cómo puedo probar la unidad de un MVC UserViewControl?
- 19. Cómo probar la unidad HtmlHelper con Moq?
- 20. ¿Cómo probar un método de unidad que simplemente inicia un hilo con jUnit?
- 21. ¿Cómo puedo probar la unidad de un controlador Symfony2?
- 22. ¿Cómo puedo probar la unidad GC?
- 23. ¿Cómo probar la unidad Singleton class - C++?
- 24. ¿Cómo puedo probar la unidad? ¿Es descartable?
- 25. Cómo burlarse de una interfaz que se extiende IEnumerable
- 26. ¿Cómo debería una unidad probar un controlador .NET MVC?
- 27. java force una clase que se extiende
- 28. ¿Llamar a un DAO desde otro DAO?
- 29. ¿Puede un DAO llamar a DAO?
- 30. ¿Cómo probar la unidad de que ExecutorService genera un nuevo hilo para la tarea?
Aunque puedo ver a su lógica, puedo imaginar funcionalidad DAO que podrían beneficiarse de la unidad pruebas. Por lo tanto, no creo que sea justo decir que los DAO no deben someterse a pruebas unitarias, todo depende de la clase en cuestión. – teabot