2015-09-18 2 views
1

У нас есть приложение Spring, построенное с помощью Gradle, работающее с Spring Boot 1.2.5.RELEASE. Мы написали несколько первоначальных тестов интеграции с использованием Rest Assured для тестирования с нашими конечными точками REST. Это сработало, и наши конечные точки REST нашего приложения отвечали соответствующим образом через браузер и Postman.Интеграционные тесты с использованием весенней загрузки и безопасности

Затем мы использовали Spring Security для реализации OnePerRequestFilter и нашего собственного AuthenticationProvider. Наша аутентификация работает нормально, и браузер и почтальон все еще получают соответствующие ответы, однако наши интеграционные тесты больше не работают.

шагая через испытание, мы видим, наши конечные точки контроллера называют и возвращают правильный выход, но за эту точку мы получаем ошибку (с нулевым stacktrack) из org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.AbstractMethodError.

Мы достигли прогресса, инициализируя наши интеграционные тесты с помощью Spring Security, мы попытались отказаться от Rest Assured и просто использовать MockMvc, мы попытались вернуться к Rest Assured и инициализировать с помощью MockMvc. Пока не повезло.

Наш код инициализации ниже, закомментированные части предназначены для Rest Assured, текущая реализация непосредственно используется MockMvc.

Любая помощь была бы принята с благодарностью!

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = IamExtensionApplication.class) 
@WebIntegrationTest 
public class OurIntegrationTest { 
private MockMvc mockMvc; 

@Autowired 
private WebApplicationContext webApplicationContext; 

// @Autowired 
// private FilterChainProxy filterChainProxy; 


@Before 
public void setUp() { 
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext). 
      apply(springSecurity()). 
//    addFilters(filterChainProxy). 
      build(); 

//  RestAssuredMockMvc.mockMvc(mockMvc); 
} 

@Test 
public void our_test() { 
    try { 
     ResultActions resp = amockMvc.perform(post("/our/endpoint").param("test", "test_value")); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
//  MockMvcResponse resp = given() 
//    .param("test", "test_value") 
//    .when() 
//    .post("/our/endpoint"); 
} 

ответ

1

Мы попробовали несколько вариантов этих конфигураций, но один мы, наконец, попробовали, что работал (что мы на самом деле не найти задокументированы в любом месте) должны были пройти наш filterChainProxy в качестве параметра функции springSecurity().

Надеюсь, что это поможет другим!

Смежные вопросы