2017-12-31 59 views
0

나는 dao 구현을위한 테스트 케이스가있다.
테스트 클래스 코드 -봄 부팅 Dao 테스트

@RunWith(SpringRunner.class) 
@RestClientTest({XyzDaoImpl.class}) 
@TestPropertySource(locations = "classpath:application-test.properties") 
public class XyzDaoTest { 

    @Autowired 
    XyzDaoImpl xyzDaoImpl; 

    @Test 
    public void testGetXyzDetails(){ 
     assertThat(xyzDaoImpl.getXyzDetails("123", null)).isNotNull(); 
    } 
} 

xyzDaoImpl.getXyzDetails 메소드 구현은 RestTemplate을 사용하여 백엔드를 호출합니다. 내 설정 클래스 코드가 포함되어있는 경우
이 시험은 잘 작동 -

@Bean 
public RestTemplate restTemplate() { 
    return new RestTemplate(); 
} 

을하지만 난 시간 제한 등의 설정 빌더를 사용하여 나머지 템플릿을 작성하는 경우, 테스트가 실패 -

@Bean 
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { 
    return restTemplateBuilder 
      .setConnectTimeout(timeout) 
      .build(); 
} 

는 콩이 @profile를 사용하여 만드는 시도 ("test") default 및 @Profile ("! test") - 사용자 정의 설정, 여전히 테스트가 실패합니다.
오류입니다 - @RestClientTest으로 실행하는 경우

testException = java.lang.AssertionError: No further requests expected: HTTP POST http://... url. 

답변

0


RestTemplate 실제 클라이언트하지 RestTemplateBuilder에서 돌아왔다. 이들은 가짜 서버 (MockRestServiceServer)에 연결되어 있으며 예상되는 요청과 해당 응답을 설정해야합니다.

이전 테스트는 new RestTemplate()이고 네트워크에 연결하는 실제 클라이언트입니다.

RestTemplateBuilder에서 RestTemplate을 생성하여 실제 서버와 통신하려면 @RestClientTest을 벗어날 수 있습니다.

  • 가 설치 MockRestServiceServer
  • 사용 RestTemplateBuilderRestTemplate 생성 및 구성 요청을 보낼 @RestClientTest 당신이 RestTemplateBuilderMockRestServiceServer에 회담 조롱 RestTemplate를 생성 할 경우

    ,

    • 사용 이전 단계.

    는 다음과 같이

    @RunWith(SpringRunner.class) 
    @RestClientTest({XyzDaoImpl.class}) 
    @TestPropertySource(locations = "classpath:application-test.properties") 
    public class XyzDaoTest { 
        @Autowired 
        private MockRestServiceServer server; 
    
        @Before 
        public void setUp() throws Exception {    
          this.server.expect(requestTo("/...url")) 
           .andRespond(withSuccess("{\"status\": \"ok\"}", MediaType.APPLICATION_JSON)); 
        } 
    
        @Test 
        public void testGetXyzDetails(){ 
         assertThat(xyzDaoImpl.getXyzDetails("123", null)).isNotNull(); 
        } 
    } 
    
    class XYZDaoImpl { 
        @Autowired 
        RestTemplate client; 
        String getXyzDetails(String a, String b) { 
         return client.getForObject("/...url", String.class); 
        } 
    } 
    
  • +0

    가 @RestClientTest이 처리했다십시오. 감사합니다 – chappalprasad

    +0

    위의 @RunClientTest를 단위 테스트 용으로 유지하면 applicationContext 오류를로드 할 수 없습니다.
    내가 변경 한 설정은 아래에 추가했습니다.
    server = MockRestServiceServer.createServer (new RestTemplate());
    또한 XYZDaoImpl에서 Autoried 인 클래스를 포함하여 시도했습니다. EnabledWebMvc를 추가 한 후에는 아무 것도 얻지 못합니다 java.servlet.ServletContext – chappalprasad

    +0

    @ ServAppContext는 @WebAppConfiguration에 의해 제공됩니다. 구성 요소 검색 경로에 @EnableWebMvc가있는 구성 요소가 있기 때문에 찾으려고합니다. @EnableWebMvc를 사용하여 구성 요소를 제외하거나 @WebAppConfiguration이있는 구성 요소를 추가 할 수 있습니다. – sabertiger