Используя JDBC и Spring, в вашем приложении вы создадите объект DataSource
и используете этот объект для создания объекта JdbcTemplate
, который вы используете для запуска ваших запросов JDBC. Пример: this. Поэтому, чтобы использовать базу данных HSql, вам нужно будет изменить значения, используемые для настройки компонента DataSource
, но только для ваших модульных тестов.
В зависимости от того, как вы используете Spring (аннотации, xml config), есть несколько способов сделать это. Вам нужно будет создать новый компонент конфигурации или файл конфигурации xml, а затем указать его в своих модульных тестах.
Для XML, скопировать над пружинной файл контекста XML, и изменить DataSource
значения к чему-то вроде:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;"/>
<property name="username" value="SA"/>
<property name="password" value=""/>
Затем вам нужно ссылаться на этот новый контекст конфигурации в тестовом модуле , Что-то вроде:
@RunWith(SpringJUnit4ClassRunner.class)
// ApplicationContext will be loaded from "classpath:/test-config.xml"
@ContextConfiguration("/test-config.xml")
public class DAOTests {
@Autowired
private DatabaseDAO dao;
}
С аннотациями, вы должны будете сделать новый класс конфигурации (вы должны иметь один уже, класс помечается @Configuration
) и возвращает соответствующий DataSource
. Что-то вроде этого:
@Bean
public DataSource hsqlDataSource(){
return DataSourceBuilder
.create()
.driverClassName("org.hsql.jdbcDriver")
.url("jdbc:hsqldb:file:src/test/resources/testData;shutdown=true;")
.username("SA")
.password("");
.build();
}
Вы можете настроить профиль для конфигурации (с помощью @Profile("test")
аннотацию), а затем указать, какой профиль вы хотите использовать в тестовом модуле (@ActiveProfiles("test")
). Дополнительная информация here.
В качестве альтернативы вы можете использовать Spring EmbeddedDatabaseBuilder, если вы просто пытаетесь выполнить простой тест DAO. Есть учебник here. Он настраивает вас с помощью HSql в базе данных памяти (в отличие от файловой системы), что очень удобно для настройки/разрыва. Просто добавьте компонент в свой класс конфигурации, и ваш DAO должен забрать его, если Spring вводит вам DataSource
. Пример ниже взят из here
@Bean
public DataSource dataSource() {
// no need shutdown, EmbeddedDatabaseFactoryBean will take care of this
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("db/setup_script.sql")
.build();
}
Там немного, чтобы пружинные управление конфигурацией. В этом ответе я не очень подробно рассказывал об этом, но посмотрите несколько примеров, и это начнет иметь смысл.
Как вы подключаетесь к своей базе данных? Hibernate? Обычный старый JDBC? Вы используете Spring? У вас есть строка подключения, поэтому при выполнении модульных тестов необходимо заменить строку подключения в реальном времени. – AndyN
@ AndyN Я использую JDBC и Spring. – NoSuchUserException