Свойства junit / spring не загружаются в контексте приложения - PullRequest
6 голосов
/ 18 ноября 2010

Во время выполнения теста junit я не могу получить контекст приложения для загрузки свойств из внешних файлов свойств.

Учитывая следующее:

TestClass

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/app-config.xml")
public class JdbcWatsonDaoTests {

    @Autowired
    JdbMyDao jdbcMyDao;

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testMethod() {
        doSomeStuff();
    }
}

app-config.xml

<util:properties id="aProperties" location="classpath:spring/a.properties" />
<util:properties id="bProperties" location="classpath:spring/b.properties" />

<bean id="oracleDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="${oracle.url}"/>
    <property name="username" value="${oracle.username}"/>
    <property name="password" value="${oracle.password}"/>
</bean>

, а файлы a.properties и b.properties находятся в том же месте, что и app-config.xml ...

Я обнаружил, что при запускетест, заполнители свойств (литерал "$ {property}") - это то, что отправляется на сервер оракула, а не значения в файлах свойств.

Я также пытался использовать конфигурацию компонента с помощьюВместо PropertyPlaceholderConfigurer, но он по-прежнему не находит / не включает свойства.

Я использую helios eclipse, spring 3.0.5, новейший выпуск m2eclipse и 4.4 junit.Мне пришлось понизить версию junit для другой ошибки maven / junit.

При публикации в tomcat свойства читаются и используются должным образом.Я вижу проблему только при запуске теста junit.

Ответы [ 4 ]

6 голосов
/ 18 ноября 2010

В соответствии с вашим исключением:

org.springframework.jdbc.CannotGetJdbcConnectionException: Не удалось получить соединение JDBC;вложенное исключение: org.apache.commons.dbcp.SQLNestedException: невозможно создать PoolableConnectionFactory (ORA-01017: неверное имя пользователя / пароль; вход в систему запрещен

Ваша проблема НЕ в том, что свойства не найдены, еслисвойства не найдены, исключение было бы что-то вроде org.springframework.beans.factory.BeanDefinitionStoreException: ... Could not resolve placeholder 'oracle.username'

И это потому, что вам нужно настроить PropertyPlaceholderConfigurer вместо PropertiesFactoryBean (это то, что util: properties делает http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#xsd-config-body-schemas-util-properties)

<bean id="propertyPlaceHolderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:spring/a.properties</value>
                <value>classpath:spring/a.properties</value>
            </list>
        </property>
    </bean>
1 голос
/ 23 ноября 2011

Вы можете разделить ваши тестовые конфигурационные файлы, контекст Spring, jbdc.properties, в src / test / resources dir для соблюдения файлов структуры maven. Чтобы настроить специальные свойства файлов для теста, вы должны определить их в контексте приложения test spring, используя propertyPlaceHolderConfigurer , как указано Ralph .

Файлы свойств должны находиться в src / test / resources и загружать их с косой чертой и именем файла / a.properties . Поместите файл в тот же каталог, что и файл конфигурации Spring, чтобы загрузить его.

<bean id="propertyPlaceHolderConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>/a.properties</value>
            <value>/a.properties</value>
        </list>
    </property>
</bean>
0 голосов
/ 18 ноября 2010

Я сдался.Я скачал свежую копию Eclipse 3.6 для Java EE и следовал инструкциям по установке пакета инструментов springsource с помощью метода сайта обновления.

Я импортировал свой проект в новую среду с новым рабочим пространством, и все, что работает, отлично работает.

Я записываю его, чтобы затмить гномов.

0 голосов
/ 18 ноября 2010

Похоже, вы используете Maven. Это помогло бы узнать, куда вы положили файлы. По соглашению тестовая версия файлов свойств должна находиться в src / test / resources /, а рабочая версия - в src / main / resources. Они должны разрешиться автоматически.

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