SpringBoot Test Tip 여러가지..

공부는 혼자하는 거·2023년 11월 16일
0

Spring Tip

목록 보기
51/52

짜잘한

./gradlew clean test

에서 제외하고 싶은 테스트 메서드나 클래스에는 위에 @Disabled를 붙이면 된다.

전체 테스트를 수행할때, 공통적으로 수행하고 싶은 작업이 단 한번만 있으면 테스트 클래스들이 상속받는 상위 템플릿 클래스를 하나 만든다,

@TestInstance(TestInstance.Lifecycle.PER_CLASS)

WebMVCTest 관련 팁

인터페이스를 주입받고 거기서 인스턴스를 뽑아내서, 함수를 실행하는 컨트롤러의 Mocking

예를 들어 다음과 같은 컨트롤러가 있다고 치자

구글 뿐만 아니라 여러가지 소셜서비스 구현체들이 존재할 수 있다.

이럴 경우 일반적인 @MockBean으로 서비스 계층을 Mocking 하는 게 불가능하고, 직접 Mocking용 Bean을 만들어주고 주입하자.

최적화

https://shirohoo.github.io/backend/test/2022-02-22-rest-docs-optimization/

Test 시 유용한 라이브러리

Instancio

https://www.instancio.org/

testImplementation("org.instancio:instancio-junit:3.3.0")

테스트용 객체들을 일일히 생성하기 귀찮을 때 유용하게 사용할 수 있는 라이브러리이다.
사용방법은 공식문서에 잘 나왔으니 생략한다.

Testcontainers

https://testcontainers.com/

Docker를 활용하여, 프로덕션과 격리된 통합테스트를 수행할 때 유용하게 사용가능하다.

Mockito 관련 팁

정적 메서드 모킹

아래는 엑셀 파일을 다운로드하는 API이다.

보다시피 org.apache.commons.io.IOUtils 의 copy라는 정적 메서드를 사용하고 있다. 이럴경우 일반적인 모킹은 불가능하다.

Mockito에는 mockStatic을 통해 정적메서드를 모킹해줄 수 있는 API를 제공해준다.

정적 메서드를 모킹하는 게 좋지 않은 패턴이라고 하지만.. 어떻게 세상 일이 맘처럼 쉽게 흘러가겠냐. 필요할 때는 해야 한다.

https://www.baeldung.com/mockito-mock-static-methods

https://stackoverflow.com/questions/63263662/mockito-3-4-0-static-mocking-exception

@WebMvcTes 시 Authentication Mocking

https://sedangdang.tistory.com/303

https://shanepark.tistory.com/417

https://velog.io/@calaf/JUnit5-Mockito-%EC%9D%B4%EC%9A%A9%ED%95%B4%EC%84%9C-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC-%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%95%98%EA%B8%B0

Mockito 사용시 final class 문제 해결

https://shanepark.tistory.com/422

Multipart Form Data Mocking

MockMultipartFile name 이 Key 부분이니 컨트롤러의 파라미터 네임과 일치하여 작성하자.

이런 식으로 RequestPart 로 Json을 같이 받는 API 가 있다면 아래와 같이 TEST 가능하다.

RestDoc

https://jaehun2841.github.io/2019/08/04/2019-08-04-spring-rest-docs/#API-Document-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0

Custom snippet

src/test/resources/org/springframework/restdocs/templates/asciidoctor/ 경로에 원하는 형식을 추가

Document Image response in Spring REST Docs

https://stackoverflow.com/questions/43680422/document-image-response-in-spring-rest-docs

https://velog.io/@dhfl0710/Spring-RestDocs-%EB%AC%B8%EC%84%9C%ED%99%94

@ActiveProfiles + @SpringBootTest(properties)

activeProfiles와 spring.profiles.actifve 가 일치하지 않을 때..

https://sunghs.tistory.com/158

profile
시간대비효율

0개의 댓글