Во-первых, у нас есть класс конфигурации. Здесь код почти равен вашему, но обратите внимание на @Configuration
. Эта аннотация сообщает Spring, что класс должен быть выбран при автоматическом сканировании компонента c. Это потому, что он содержит метааннотацию @Component
. Аннотация, которую вы используете, @ConfigurationProperties
не воспринимается при сканировании компонента, потому что это не аннотация @Component
.
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
public class AppConfig {
// Other bean configurations...
}
Далее @Service
. Как я понял, вы заполняете Features
данными из файла features.json
. Путь к этому файлу сохраняется в файле application.yaml
. Я предполагаю, что путь к файлу features.json
настроен в ключе конфигурации sample-feature-app
. В этом случае вы можете просто сделать это в вашем сервисе:
import com.example.demo.model.Feature;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
@Service
public class Features extends ArrayList<Feature> {
@Value("${sample-feature-app}")
private String packageFeautres;
@PostConstruct
public void loadFeatures() {
// Load the data from features.json ...
}
}
Конфигурация будет загружена в переменную packageFeatures
из-за аннотации @Value
, которая вводит конфигурацию, указанную между ${}
, В этом случае это будет путь к файлу json. Чтобы закончить, это мой application.yaml
файл в каталоге src / main / resources:
sample-feature-app: /path/to/features.json
И в последней части - тест. В тесте вы в основном загружаете «срез», необходимый для теста, который в данном случае является Features
классом. Это делается @SpringBootTest(classes = Features.class)
. Затем вы просто автоматически подключаете этот компонент. И в самом тесте вы утверждаете, больше ли размер 0. Это делается, как указано в комментарии под вашим вопросом, с помощью метода assertTrue
JUnit.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.Assert.assertTrue;
@SpringBootTest(classes = Features.class)
public class ServiceFeatureTest {
@Autowired
private Features features;
@Test
public void loadFeatures_checkSize() {
assertTrue(features.size() > 0);
}
}
Вам не нужно аннотации @ContextConfiguration
больше, потому что AppConfig
является @Configuration
и определяется автоматически (это должно быть, если он находится в подпакете вашего @SpringBootApplication
/ @SpringBootConfiguration
аннотированного основного класса).