用于单元测试的spring-boot junit负载测试属性资源

时间:2018-11-22 01:26:01

标签: java spring unit-testing spring-boot junit

我正在使用 spring-boot-1.5 。在单元测试期间,是否可以在 src / test / resources 中加载 application.properties ?我知道如何使用集成测试来加载它,我们可以使用 @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);
      ...
  }
}

在运行此单元测试时未加载属性,因此在BookService.java中获得了NPE。运行单元测试时,有什么方法可以加载src / test / resource / application.properties吗?

任何指针或帮助都是非常有意义的。

2 个答案:

答案 0 :(得分:0)

您可以使用@TestPropertySource

查看此页面:override-default-spring-boot-application-properties-settings-in-junit-test

答案 1 :(得分:0)

最后,我得到了答案。我使用下面的代码在运行模拟时设置静态字段。 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);
      ...
  }
}

非常感谢支持人员。让我们继续帮助别人。