2017-12-29 38 views
1

@MessagingGateway을 사용하는 @RestController이 있는데 Spring REST Docs에 Spring 통합 구성 요소 조롱을 위해 지원되는 지원이 있는지 궁금합니다. Spring REST Docs를 활용하여이 시나리오에 대한 문서를 생성하는 가장 좋은 방법은 무엇입니까? (@MessagingGateway을 조롱하는 가장 좋은 방법은 무엇입니까?)Spring REST 문서 테스트에서 Mocking @MessagingGateway

+0

무슨 뜻인지 확실하지 않습니다. REST Docs는 REST API를 문서화하는 데 도움을줍니다. 'MessagingGateway'는 REST 메소드에서 사용할 수 있지만 API의 일부로 간주되지는 않습니다. 표준 mocking 도구 (Mockito 등)로 게이트웨이 메소드를 조롱 할 수 있습니다. 아마도 당신의 질문에 뭔가 빠져 있습니다; 그렇다면 질문을 편집하여 자세한 내용과 의미를 보여주는 예제를 펼치십시오. –

+0

RestTemplate을 사용하여 원격 API를 호출 할 때'@ AutoConfigureStubRunner'와 동일한 기능을 찾고있었습니다. 당신은 내 다른 게시물을 통해 (https://stackoverflow.com/questions/47948454/messaginggateway-spring-cloud-stream-and-error-handling-across-both) 나를 도왔다는 것을 기억할 수 있습니다. Spring Cloud Stream을 이용하여 비동기 적으로 요청을 처리하기 위해 모든 백엔드 서비스를 수정 한 후 RestTemplate을 사용하여'@ MessagingGateway'로 원격 API를 호출하십시오. 나는 프론트 엔드 REST API를 가지고 있는데 여전히 문서를 생성하고 싶다. –

+0

REST (API) Docs와 REST 컨트롤러 내부가 섞여있는 것처럼 보입니다. 내 대답이 도움이되는지 확인하십시오. @ MessagingGatewau는 단순한 인터페이스이기 때문에 조롱하는 것은 쉽지 않습니다. –

답변

1

당신이 그것을 주입 모의 인터페이스가있는 컨트롤러에 대해 REST 문서 도구를 실행하려면 의미하는 경우,이 같은 일을해야 ...

@Autowired 
private MyController controller; 

@Test 
public void restDocsWithMockGateway() { 
    MyGateway gate = mock(MyGateway.class); 
    willReturn(new Bar("xxx")).given(gate).foo(any(Foo.class)); 
    this.controller.setMyGateway(gate); // replace the SI implementation with the mock 

    // now do mockmvc stuff with REST Docs 

} 

그러나

@MessagingGateway 
public interface MyGateway { 

    Bar foo(Foo foo); 

} 

을 가정 게이트웨이를 조롱하는 것은 REST Docs와는 아무런 관련이 없습니다.

그게 무슨 뜻이 아니라면 질문을 펼치십시오.

+0

autowiring을 사용한다면, 테스트에서'@ IntegrationComponentScan'을 생략하고 대신 모의'@ Bean'을 추가하십시오. –