Spring-boot ресурс свойств теста загрузки junit для модульного теста

Я использую пружина-ботинок-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 при запуске модульного теста?

Любые указатели или помощь были бы действительно заметны.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
688
2

Ответы 2

Можно использовать @TestPropertySource

См. Эту страницу: переопределить-по умолчанию-весна-загрузка-приложение-свойства-настройки-в-junit-test

Нет, это не сработало .... Я уже пробовал ... он будет работать только с конфигурацией контекста ... для модульного теста вам не нужен контекст .... То же самое применимо для propertyResource

VelNaga 22.11.2018 02:49

Наконец-то я получил ответ. Я использовал приведенный ниже код для установки статических полей при запуске макетов. 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);
      ...
  }
}

Большое спасибо за поддержку, ребята. Давайте продолжать помогать другим.

Другие вопросы по теме