Pregunta

La primavera DA ayuda en la escritura de DAOs.Cuando se utiliza iBATIS como el marco de persistencia, y la ampliación de SqlMapClientDaoSupport, un SqlMapClient simulacro debe ser establecido para el DAO, pero no puedo hacerlo.SqlMapClientTemplate no es una interfaz y EasyMock no crea un simulacro de la misma.

¿Fue útil?

Solución

DAO y de la unidad de pruebas no se llevan bien !Que no tiene sentido para burlarse de cualquier cosa en un componente que no tiene ninguna lógica de negocio y se centra en la base de datos de access.Usted debe tratar en lugar de escribir un test de integración.Echa un vistazo a la primavera documentación de referencia, el capítulo 8.3 : http://static.springframework.org/spring/docs/2.5.x/reference/testing.html

Otros consejos

Esta misma razón es por qué no se extienden desde SqlMapClientDaoSupport.En lugar de eso, me inyecto una dependencia a la SqlMapClientTemplate (escrito como el de la interfaz SqlMapClientOperations).Aquí un Manantial 2.5 ejemplo:

@Component
public class MyDaoImpl implements MyDao {

    @Autowired
    public SqlMapClientOperations template;

    public void myDaoMethod(BigInteger id) {
        int rowcount = template.update("ibatisOperationName", id);
    }
}

Como @Banengusk sugirió - esto se puede lograr con Mockito.Sin embargo, es importante establecer que su DAO será el uso de un Resorte SqlMapClientTemplate que envuelve su maqueta SqlMapClient.De hecho, SqlMapClientTemplate los delegados de las invocaciones a la SqlMapSession en el IBatis capa.

Por lo tanto, algunas adicionales simulacro de programa de instalación es necesario:

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);

A continuación, podemos comprobar 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"));

Trate de Mockito.Se permite burlarse de clases, no sólo las interfaces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top