Как подсказал @Banengusk - этого можно достичь с помощью Mockito . Тем не менее, важно установить, что ваш DAO будет использовать Spring SqlMapClientTemplate
, который оборачивает ваш макет SqlMapClient
Infact, SqlMapClientTemplate
делегирует вызовы SqlMapSession
в слое IBatis.
Поэтому требуется дополнительная настройка макета:
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);
Затем мы можем проверить поведение следующим образом:
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"));