Задача Ant для Spring Validation - PullRequest
       0

Задача Ant для Spring Validation

1 голос
/ 17 августа 2011

Мне нужно задание ANT для проверки конфигурации пружины. Мне нужно найти проблемы во время сборки до выполнения? Например, в контекстном файле Spring содержится свойство bean, но у этого bean нет этого свойства. В Eclipse есть инструмент Spring Explorer, который выполняет эту проверку.

спасибо,

org.springframework.web.context.ContextLoaderListener failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'readController' defined in class path resource [applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'productOperations' of bean class [com.bee.view.json.ReadController]: Bean property 'productOperations' is not writable or has an invalid setter method.

Соответствует ли тип параметра установщика типу возвращаемого значения?.

1 Ответ

0 голосов
/ 17 августа 2011

Простой способ убедиться в правильности вашего контекста - создать тест 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 загружен самЭто.Если у вас есть ошибка, то модульные тесты не пройдут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...