Простой способ убедиться в правильности вашего контекста - создать тест JUnit, который загружает контекст.Использование классов поддержки spring-test.jar делает это простым:
public class MyTest extends AbstractDependencyInjectionSpringContextTests {
// this will be injected by Spring
private QueryDao queryDao;
private MyBusinessObject myBusinessObject;
// ensure that spring will inject the objects to test by name
public MyTest () {
setAutowireMode(AUTOWIRE_BY_NAME);
}
@Override
protected String[] getConfigLocations() {
return new String[] { "applicationContextJUnit.xml" };
}
public void testQueryDao() {
List<SomeData> list = queryDao.findSomeData();
assertNotNull(list);
// etc
}
public void testMyBusinessObject() {
myBusinessObject.someMethod();
}
public void setQueryDao(QueryDao queryDao) {
this.queryDao = queryDao;
}
}
Проблема с загрузкой контекста, который используется в веб-приложении, заключается в том, что JUnit не обязательно имеет доступ к тем же ресурсам (например, JNDI).источников данных), поэтому, если у вас есть следующее в вашем applicationContext.xml:
<beans ...>
<bean id="myBusinessObject" class="com.test.MyBusinessObject">
<property name="queryDao" ref="queryDao"/>
</bean>
<bean id="queryDao" class="com.test.QueryDao">
<property name="dataSource" ref="dataSource"/>
</bean>
<jee:jndi-lookup
id="dataSource"
jndi-name="jdbc/mydatasource"
resource-ref="true"
cache="true"
lookup-on-startup="false"
proxy-interface="javax.sql.DataSource"/>
</beans>
, а ваш applicationContextJUnit.xml импортирует ваш «реальный» контекст приложения и переопределит ресурсы:
<beans ...>
<import resource="classpath:applicationContext.xml"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:..."/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
</beans>
Таким образом, ваши модульные тесты будут загружать контекст приложения (даже тот, который вы явно не тестировали в своем модульном тесте), и вы можете быть уверены, что ваш контекст верен, потому что Spring загружен самЭто.Если у вас есть ошибка, то модульные тесты не пройдут.