Я использую пружина-ботинок-1.5. Есть ли способ загрузить application.properties в SRC / тест / ресурсы во время модульный тест? Я знаю, как загрузить его с помощью интеграционного теста, мы можем использовать @SpringBootTest или @ContextConfiguration, но я хотел бы использовать application.properties во время модульного теста.
Позвольте мне немного объяснить свой сценарий,
@SpringBootApplication(exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class })
@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)
public class BookBackendApplication {
public static void main(String[] args) {
SpringApplication.run(BookBackendApplication.class, args);
}
}
@Service
public class BookService {
@Value("${book-list:ACTIVE}")
private List<String> bookList = new ArrayList<>();
@Value("${book-status:PURCHASING}")
private String bookStatus;
public BookResponse purchaseBook(BookRequest bookRequest) {
if (bookRequest.getStatus().equals(bookStatus)) { //Here getting NPE while executing unit test
....
}
}
}
МОДУЛЬНЫЙ ТЕСТ
@RunWith(SpringRunner.class)
public class BookServiceTest {
@InjectMocks
private BookService bookService;
@Test
public void testBookActivate() throws IOException {
BookResponse bookResponse = bookService.purchaseBook(bookRequest);
...
}
}
Свойства не загружаются во время выполнения этого модульного теста, поэтому получаем NPE в BookService.java. Есть ли способ загрузить src / test / resource / application.properties при запуске модульного теста?
Любые указатели или помощь были бы действительно заметны.




Можно использовать @TestPropertySource
См. Эту страницу: переопределить-по умолчанию-весна-загрузка-приложение-свойства-настройки-в-junit-test
Наконец-то я получил ответ. Я использовал приведенный ниже код для установки статических полей при запуске макетов. ReflectionTestUtils решил проблему.
@RunWith(SpringRunner.class)
public class BookServiceTest {
@InjectMocks
private BookService bookService;
@Before
public void setup() {
ReflectionTestUtils.setField(bookService, "bookStatus", "PURCHASING");
ReflectionTestUtils.setField(bookService, "bookList", Arrays.asList("ACTIVE","ACTIVATING"));
}
@Test
public void testBookActivate() throws IOException {
BookResponse bookResponse = bookService.purchaseBook(bookRequest);
...
}
}
Большое спасибо за поддержку, ребята. Давайте продолжать помогать другим.
Нет, это не сработало .... Я уже пробовал ... он будет работать только с конфигурацией контекста ... для модульного теста вам не нужен контекст .... То же самое применимо для propertyResource