Весенний загрузочный тест не собирает файлы hbm.xml из src/main/resources

У нас есть проект на spring-boot версии 1.5.2.RELEASE.

Нам нужно работать с именованными запросами в спящем режиме в xml (Именованные запросы в аннотации java для нас не вариант).

Для этого мы добавили все наши hbm.xml файлы (которые содержат эти именованные запросы) в каталог src/main/resources.

Это не проблема, когда наше приложение работает. Именованные запросы получаются правильно.

Однако, когда мы пишем тестовые примеры интеграции, он не может распознавать именованные запросы.

Мы получаем:

Именованный запрос не найден, исключение

Ниже приведен код нашего тестового примера:

@RunWith(SpringRunner.class)
@SpringBootTest( webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyIntegrationTest {
    @Autowired
    private TestRestTemplate template;

    @Test 
    public void checkRestService() throws Exception {
        ResponseEntity<String> response = template.getForEntity("/hello/1", String.class);
        assertTrue(response.getStatusCodeValue() == 200);
    }
}

Если мы скопируем файлы hbm.xml в src/test/resources directory, файлы hbm.xml будут правильно подобраны, и тест будет выполнен правильно.

В любом случае, файлы xml берутся прямо из папки src/main/resouces, и нам не нужно копировать эти файлы?


person Hamid Virani    schedule 04.04.2017    source источник
comment
заданный вопрос, который может вам помочь.   -  person Montassar El Béhi    schedule 02.05.2017
comment
Спасибо, что разместили ссылку на аналогичный вопрос. Однако мы можем использовать Hibernate SessionFactory и правильно использовать именованные запросы из файлов hbm.xml в основном приложении. Проблема только при написании интеграционных тестов.   -  person Hamid Virani    schedule 02.05.2017


Ответы (1)


У меня возникла та же проблема, что и у вас, в Spring Boot 2.1.3, и я решил ее, переместив файл application.properties из папки src/test/resources в папку src/main/resources и переименовав его в application-test.properties.

Ниже приведен мой случай:

Мое приложение Spring Boot 2.1.3 имеет следующую структуру папок:

src/main
     +-- java (applcation java files)
     +-- resources
            +-- hibernate/MyMapping.hbm.xml
            +-- hibernate/MyMapping2.hbm.xml
            +-- application.properties (define the default / base attributes needed for my application)
            +-- application-dev.properties (define the development environment settings)
src/test
    +-- java (testing java files)
    +-- resources
            +-- application.properties (define the testing attributes)

Всякий раз, когда я запускаю тестовый пример в Eclipse/maven, всегда возникает ошибка:

Именованный запрос не найден, исключение

Я решил это:

  1. Переместите файл src/test/resources/application.properties в src/main/resources/application-test.properties.
  2. В src/main/resources/application.properties определите следующий атрибут:
spring.jpa.mapping-resources=hibernate/MyMapping.hbm.xml,hibernate/MyMapping2.hbm.xml
  1. Добавьте аннотацию @ActiveProfile("test") ко всем тестовым классам, чтобы он сначала загружал файл application-test.properties в папку src/main/resources.

После этого тестовые примеры моего приложения SpringBoot 2 могут без проблем запускаться как в командной строке Eclipse, так и в командной строке maven.

Я чувствую, что Spring Boot/Hibernate использует местоположение первого загруженного application.properties в качестве базы для сканирования/нахождения всех файлов hbm. Это может быть связано с загрузчиком классов

person Raymond Chiu    schedule 27.02.2019