Что поместить в файл контекста приложения. Принцип работы TestContext Framework заключается в том, что он позволяет повторно использовать проводку приложения в контексте ваших интеграционных тестов. Так что по большей части , нет ничего особенного для тестов, которые вы бы поместили в файлы конфигурации вашего приложения. Если ваш контроллер имеет зависимость от служебного компонента в вашем приложении, то он будет иметь это и в вашем интеграционном тесте. Если в вашем DAO есть SessionFactory в вашем приложении, то же самое для вашего интеграционного теста. Таким образом, вам не нужно заново соединять все это при написании интеграционных тестов. Очень круто.
Я сказал по большей части выше, потому что на ум приходит хотя бы одно исключение. Обычно ваше приложение будет использовать JNDI для определения местоположения источника данных, но в интеграционном тесте (по крайней мере, интеграционном тесте вне контейнера) у вас обычно не будет доступной среды JNDI. Поэтому обычно вы должны изолировать создание bean-компонента DataSource в отдельный файл и использовать версию JNDI для вашего живого приложения и версию не-JNDI (например, просто создайте прямую BasicDataSource
, скажем) для вашего интеграционного теста. Вот пример первого:
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/myStoreDS" resource-ref="true"/>
и вот пример последнего:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="${dataSource.driverClassName}"
p:url="${dataSource.url}"
p:username="${dataSource.username}"
p:password="${dataSource.password}" />
Это будет в отдельных файлах. Первый может быть введен в beans-datasource.xml
для обычного использования приложения, а второй в beans-datasource-it.xml
для интеграционных тестов. Конфигурация, которая является обычной для обычного использования приложений и интеграционных тестов (то есть, подавляющее большинство конфигурации вашего bean-компонента в большинстве случаев), должна быть в общем конфигурационном файле или файлах.
Кроме того, Spring 3 представляет новое пространство имен jdbc
, которое позволяет вам создавать встроенную базу данных, такую как база данных HSQLDB или база данных Derby и т. Д. Это выглядит так:
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:hsql/schema.sql" />
<jdbc:script location="classpath:hsql/test-data.sql" />
</jdbc:embedded-database>
Это заменило бы конфигурацию BasicDataSource
, описанную выше, если вы хотите использовать это.
Почему происходит ошибка. Ошибка, которую вы видите, происходит потому, что ваше значение @ContextConfiguration
неявно указывает, что файл контекста приложения должен находиться в пути к классам. ВАЖНО: Удалить /resources
кусок. Это внутренности Maven; когда он создает ваш JAR или WAR, он копирует содержимое каталога resources
в ваш путь к классам, а не сам resources
. Это должно помочь.
EDIT:
Чтобы устранить ошибки «символ не найден», вам необходимо добавить свои тестовые зависимости в POM Maven. Это будет также JUnit и модуль Spring Test, оба с <scope>test</scope>
. Кроме того, если вы используете фиктивный фреймворк, такой как Mockito, вам нужно будет добавить эту зависимость (с тестовой областью) и к вашему POM. Попробуйте и сообщите, пожалуйста, о том, что происходит.