Ответ 1
Что добавить в контекстный файл приложения.. Принцип работы TestContext Framework заключается в том, что он позволяет повторно использовать проводку приложений в контексте ваших интеграционных тестов. Поэтому, по большей части, нет ничего особенного в тестах, которые вы разместили бы в своих конфигурационных файлах контекста приложения. Если у вашего контроллера есть зависимость службы bean в вашем приложении, тогда это будет и в вашем интеграционном тесте. Если ваш DAO имеет SessionFactory в вашем приложении, то это же для вашего теста интеграции. Таким образом, вы не должны подключать все эти вещи снова, когда вы пишете интеграционные тесты. Очень круто.
Я сказал по большей части выше, потому что на ум приходит хотя бы одно исключение. Обычно ваше приложение будет использовать JNDI для поиска источника данных, но в тесте интеграции (по крайней мере, в тесте интеграции с контейнером) обычно нет среды JNDI. Поэтому вы обычно должны изолировать создание DataSource bean к отдельному файлу и использовать версию 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
. Это внутренности Мавена; когда он создает JAR или WAR, он копирует содержимое каталога resources
в ваш путь к классу, а не resources
. Это должно помочь.
EDIT:
Чтобы устранить ошибки "без символа", вам нужно будет добавить свои тестовые зависимости к вашему Maven POM. Это будет JUnit и тестовый модуль Spring, а также с <scope>test</scope>
. Кроме того, если вы используете макетную инфраструктуру, такую как Mockito, вам нужно будет добавить эту зависимость (с областью тестирования) к вашему POM. Попробуйте и сообщите, что произойдет.