Netfilix Feign Client 테스트하는 방법이다.
github이슈에도 몇개 등록이 되어있는데 자세하게 읽어보지는 않았다.
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@FeignClient(name = "authentication-service")
public interface AuthServiceClient {
@PostMapping("/authenticate")
Member getMember(String accessToken);
}
@MockBean
AuthServiceClient authServiceClient;
...
@Test
public void access_auth_user() throws Exception {
...
Mockito.when(authServiceClient.getMember(accessToken)).thenReturn(member);
...
}
일반적으로 Feign Client를 다음과같이 mocking하면 mock객체가아니라 실제 feign 구현체가 들어가서 테스트에 실패한다.
feign client를 mocking하는 방법은 아래와 같다
//primary 옵션을 false로 설정
@FeignClient(name = "authentication-service", primary = false)
public interface AuthServiceClient {
@PostMapping("/authenticate")
Member getMember(String accessToken);
}
//test에서 선언시 name속성 추가
@MockBean(name = "authServiceClient")
AuthServiceClient authServiceClient;
이런식으로 테스트를 하면 mocking된 객체가 들어간다.
https://github.com/spring-cloud/spring-cloud-openfeign/issues/336
----추가
추가적으로 슬라이스 테스트할때 Feign Client 객체를 autowired받는 방법이다.
@RestClientTest(MemberServiceClient.class)
@Import({RibbonAutoConfiguration.class,
FeignRibbonClientAutoConfiguration.class,
FeignAutoConfiguration.class})
class MemberServiceClientTest {
@Autowired
private MemberServiceClient client;
//...tests
}
https://github.com/spring-projects/spring-boot/issues/7270
'spring' 카테고리의 다른 글
[jpa + junit] 슬라이스 테스트 도중 JPA metamodel must not be empty! 해결 (0) | 2020.09.01 |
---|---|
[junit5] MockMvc 테스트중 NestedServletException 통과시키기 (0) | 2020.08.26 |
[JPA] Console에 net::ERR_INVALID_CHUNKED_ENCODING 200 에러시 참고 (0) | 2020.05.15 |
[JUnit] Mockmvc를 사용한 Controller Test에서 @ControllerAdvice 테스트하기 (2) | 2019.10.31 |
[JUnit] JUnit5에서 @Before 사용하기 (0) | 2019.10.25 |