Я думаю, что вы не взаимодействуете с каким-либо удаленно работающим сервером.
SpringBootTest
Аннотация запускает весь микросервис локально внутри теста. В противном случае, если ваш тест представляет собой просто серию вызовов к удаленному серверу, вам не нужно @SpringBootTest
(и вообще не нужна весенняя загрузка :)).
Таким образом, у вас есть контекст приложения прямо внутри теста. Теперь вы спрашиваете, как предварительно заполнить данные. Это слишком широко, так как вы не указываете, где именно хранятся данные и какие слои сохраняемости данных задействованы (RDBMS, Elasticsearch, Mon go, ...)?
Одна возможная универсальная цель используется слушатель выполнения теста , который может иметь метод beforeTestMethod
.
Контекст приложения запускается, так что вы действительно можете подготовить данные пользовательским способом и сохранить их в базе данных ваш выбор (через ввод DAO в слушатель или что-то в этом роде).
Еще один интересный способ использования Flyway - обеспечить миграцию в папке src/test/resources/data
, чтобы flyway автоматически выполнял миграции во время теста.
Обновление
В комментарии говорится, что в этом случае используется база данных H2, при условии, что источник данных настроен правильно и действительно обеспечивает соединения с H2, самый простой способ - запустить SQL скрипты со вставками данных:
@Sql(scripts = {"/scripts/populateData1.sql", ..., "/scripts/populate_data_N.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
public void myTest() {
...
}
Теперь, если вам нужно работать с
this.artistRepository.save(artist);
, тогда Spring не заботится о потоках. Он может вводить любые данные, если «данные» являются компонентом (или ресурсом), поскольку вы работаете с объектами (Artist), это должен быть компонент.
Создайте TestConfiguration
с помощью bean Artist
, убедитесь, что он находится в том же пакете, что и test (чтобы процесс сканирования при весенней загрузке загрузил конфигурацию), и введите его в тест с @Autowired как обычно:
@TestConfiguration
public class ArtistsConfiguration {
@Bean
public Artist artistForTests() {
return new Artist(...);
}
}
@Import(ArtistsConfiguration.class)
@SpringBootTest
public class MyTest {
@Autowired
private Artist artist;
....
}