Заполнитель свойств Spring не работает с тестами jUnit - PullRequest
8 голосов
/ 04 апреля 2011

Я только что настроил заполнитель свойства в своей конфигурации Spring

<context:property-placeholder location="classpath:/config/config.properties" />

Если я запускаю приложение с этим конфигом, все работает нормально. Однако, если я пытаюсь запустить модульные тесты, тест не может загрузить ApplicationContext из-за FileNotFoundException. Это происходит, если я пытаюсь запустить тесты из Eclipse, а также при запуске теста через maven.

Я также пытался настроить PropertyPlaceholderConfigurer напрямую с тем же результатом.

Кажется, что файл не находится в пути к классам, даже если тестовые классы помечены

 @ContextConfiguration("classpath:/config/spring-config.xml")

файлы находятся в одной папке и находит конфигурацию xml.

Я уже пытался использовать разные пути: classpath:config/config.properties и без префикса classpath все не работает. Абсолютный путь с префиксом файла работает, но это не очень хорошее решение.

Есть ли способ заставить свойство-заполнитель работать с тестами? Одно решение, которое я уже нашел, - переопределить местоположение, предоставив свойства по умолчанию в xml. Есть ли другое решение? Или я один с этой проблемой?

Мои тестовые классы выглядят примерно так:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:/config/spring-config.xml")
@Transactional
public class JpaImageDaoTest {
@Autowired
private ImageDataDao imageDataDao;

@Test
public void testFindById() {

    Image anImage = new Image();
    anImage.setData(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 });

    imageDao.save(anImage);
    Image image = imageDao.findById(imageData.getId());

    assertNotNull(image);
    assertEquals(anImage, image);
}

и контекст xml выглядит так:

 <context:property-placeholder location="classpath:/config/config.properties" />

 <bean id="imageScalingService" class="service.image.ImageScalingService">
    <property name="maxWidth" value="${scaling.thumbnail.maxWidth}" />
    <property name="maxHeight" value="${scaling.thumbnail.maxHeight}" />
</bean>

Я наконец нашел решение / обходной путь

Кажется, что Spring не любит смешивать XML и Java Config или, по крайней мере, в этом случае не работает. Я проверял это с 4.0.9.

Вместо использования XML-файла в моем @ContextConfiguration я ссылался на класс Java Config, содержащий аннотацию @PropertySource.

@Configuration
@PropertySource("test.properties")
@ImportResource("webservices.xml")
public class TestPlaceholderConfig {

}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestPlaceholderConfig.class, WebServiceConfig.class})
public class MyTest {
}

Странно то, что webservices.xml также содержит определение bean-компонента для класса WebServiceConfig. Однако Spring не может найти компонент, определенный в Java Config. Поэтому мне пришлось добавить WebServiceConfig.class в ContextConfiguration тестового класса.

Ответы [ 2 ]

2 голосов
/ 12 мая 2014

Я думаю, что если это проект maven, файл свойств должен находиться в папке src / test / resource / config. Потому что при выполнении тестовых примеров путь к классам для тестов равен src / test / resource / config . Попробуйте поместить файл конфигурации в путь к классу теста

1 голос
/ 04 апреля 2011

В какой папке находится файл config.properties?Если вы используете стандартную структуру папок maven, она должна находиться в src / main / resources / config / config.properties

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