ресурс свойства нагрузочного теста для весенней загрузки для модульного теста - PullRequest
0 голосов
/ 22 ноября 2018

Я использую spring-boot-1.5 .Есть ли способ загрузить application.properties в src / test / resources во время модульного теста ?Я знаю, как загрузить его с помощью интеграционного теста, мы можем использовать @ 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
            ....
       }
    }
}

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

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

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

0 голосов
/ 22 ноября 2018

Вы можете использовать @TestPropertySource

См. Эту страницу: override-default-spring-boot-application-properties-settings-in-junit-test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...