2017-12-28 1 views
0

저는 주석 기반 구성을 사용하여 Spring 가능 embedded Tomcat 애플리케이션을 개발 중입니다. 이 애플리케이션은 REST 엔드 포인트에 스프링 MVC 컨트롤러를 사용한다. 관심사의 분리와 별도의 컨텍스트에서 빈이 중복되는 것을 피하기 위해, 상위 컨텍스트에는 REST 엔드 포인트가 아닌 모든 빈이 포함되며 Spring 웹 MVC 컨텍스트에는 REST 엔드 포인트 인 모든 빈이 포함됩니다.단위/통합 테스트 중에 스프링 계층 구조를 관리하는 방법은 무엇입니까?

나는 애플 리케이션의 구조를 대표하는 이러한 엔드 포인트에 대해 새로운 리팩터링 통합 테스트를 작성하려고합니다. 기존의 테스트 클래스는과 같이 있습니다

import com.stuff.web.MyEndpoint; 

@Configuration 
@ComponentScan(basePackages = {"com.stuff"}) 
public class SpringConfig { ... } 

@WebAppConfiguration 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = {SpringConfig.class}) 
public class TestMyEndpoint { 

    @Autowired 
    private MyEndpoint myEndpoint; 

    private MockMvc mockMvc; 

    @Before 
    public void setUp() { 
     mockMvc = MockMvcBuilders 
       .standaloneSetup(myEndpoint) 
       .build(); 
    } 

    @Test 
    public void testMyEndpoint() throws Exception { 
     mockMvc.perform(get("/myendpoint") 
         .accept(MediaType.APPLICATION_JSON_VALUE)) 
         .andExpect(status().isOk()) 
         .andReturn(); 
    } 
} 

문제 난 그로드 비 REST하지 콩이 있다는 것을 확인하고자하는 반면, 나는이 테스트에 사용하고 상황에 맞는 지금, 모든 콩을로드한다는 것이다 테스트 실행 중에 RestController 빈을 호출하십시오.

@Configuration 
@ComponentScan(basePackages = {"com.stuff"}, 
       excludeFilters = { 
        @Filter(type = FilterType.REGEX, pattern = "com.stuff.web.*")}) 
public class SpringConfig { ... } 

같은 내가 갈거야 분리의 종류를 확인시겠습니까 추가,하지만 난에 노력하고있어 com.stuff.web.MyEndpoint 클래스에 액세스 할 수 없습니다 테스트.

나는 쉽게 찾아 볼 수 있습니까? 상황을 분명하게 설명하면 알려줘.

답변

0

당신이 묘사하고있는 종류 (mvc vs non-mvc)는 10 년 전에는 더 이상 의미가 없었습니다. 코드를 기능/디자인 패턴 (웹/서비스/저장소 등)별로 구분하고 @Configuration 클래스를 해당 레이어에 고유하게 지정하십시오. 스프링 stereotype annotations은 앱이 어떻게 분해되어야하는지 충분히 알 수 있습니다. 그런 다음 테스트를 대상 코드와 동일한 패키지에 넣고 종속성을 모방하거나 무시하십시오.

당신이 Spring Boot를 사용하고있는 것처럼 보이지는 않습니다. (정말로해야합니다.) 응용 프로그램의 "슬라이스"를 테스트하기위한 훌륭한 섹션이 있습니다. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html#boot-features-testing-spring-boot-applications-testing-autoconfigured-tests

관련 문제