@SpringApplicationConfiguraction和@WebIntegrationTest解决方案
在Spring Boot 1.5.7 中@SpringApplicationConfiguraction和@WebIntegrationTest中不能使用了.
找了半天总算找到了解决方案.
记录如下.
源码
@SpringApplicationConfiguraction // 用下面这个替换. @SpringBootTest(classes = ReadingListApplication.class,webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) // 随机服务器端口号 @WebIntegrationTest(randomPort = true) // 使用下面这个替换: @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) // 获取端口. // 用下面这个替换. @Value("${local.server.port}") @LocalServerPort private int port;
如果在Spring Boot中使用了Spring Security,并且使用了自定义UserDetails,在测试的时候需要使用如下方式:
@Test @WithUserDetails(userDetailsServiceBeanName="userDetailsCustom",value="test") @WithMockUser(username="test", password="test", roles="READER") public void homePage_authenticatedUser() throws Exception { Reader expectedReader = new Reader(); expectedReader.setUsername("test"); expectedReader.setPassword("test"); expectedReader.setFullname("Walt Disney"); mockMvc.perform(get("/")) .andExpect(status().isOk()) .andExpect(view().name("readingList")) .andExpect(model().attribute("reader", samePropertyValuesAs(expectedReader))) .andExpect(model().attribute("books", hasSize(0))) .andExpect(model().attribute("amazonID", "habuma-20")); } // @Bean public UserDetailsService userDetailsCustom(){ return new UserDetailsService() { @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // readerRepository 是个实现了JpaRepository的空接口. UserDetails userDetails = readerRepository.findOne(username); if (userDetails != null) { return userDetails; } throw new UsernameNotFoundException("User '" + username + "' not found."); } }; }