inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Practical Testing: 실용적인 테스트 가이드

테스트를 작성하는 마음가짐

환경 통합하기 관련 질문이 있습니다.

401

opensesame

작성한 질문수 8

0

spring tdd jpa mockito 소프트웨어-테스트 junit5

답변 2

2

박우빈

안녕하세요, opensesame님! :)

매우 공감하는 문제입니다.
두 가지로 이야기 주셨지만, 결국 하나의 질문 같아서 같이 답변 드리겠습니다.

일단 제가 이런 방법을 선호하는 이유는, 실제로 우리가 테스트를 수행할 때에는 특정 부분의 테스트 1건을 수행하는 경우보다 모든 레이어를 포함한 전체 테스트를 수시로 수행하여 모듈 간 결합 시 문제가 없는지, 추가한 코드가 기존 코드에 영향을 주지 않았는지를 확인하는 일이 많기 때문입니다.
하나의 기능을 개발하는 초기 단계에서는 관련된 일부 테스트만 작성하고 수행하겠지만, 결국 기능을 머지하거나 릴리즈하기 전, CI(지속적 통합) 단계에서는 전체 테스트로 수행하는 경우가 대부분입니다.

그렇기에 어느 정도는 Trade-off가 필요하다고 생각하고, 테스트 1건의 속도와 전체 테스트의 속도를 비교(절대 속도가 아닌 기대값 대비 속도)하였을 때 전체 테스트의 수행 속도를 더 빠르게 구성하는 것이 전체적인 개발 프로세스를 고려했을 때 더 효율적인 방법이라고 생각합니다.

하지만 말씀 주신 문제도 충분히 공감하고 있기에, 한번 생각을 해보자면.. Spring bean validation을 사용하는 대신 POJO 형태로 순수한 validation을 구현하고, ControllerTest를 스프링의 도움 없이 순수한 단위 테스트로만 구성하는 형태도 가능할 것 같습니다.
(하지만 Spring bean validation의 편리함은 또 버리게 될 수밖에 없겠죠..ㅠㅠ)

지금 생각한 방법은 이 정도인데, 또 다른 방법이 있을지는 저도 계속 고민해 보겠습니다.

감사합니다. :)

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요. 프로그래밍 관련 질문에 대해 도움을 드릴게요.

테스트 컨텍스트를 한 번만 띄워서 통합 테스트를 하고 싶으시지만, 컨트롤러 단위 테스트에는 불필요하게 모킹한 서비스, 레포지토리, 컨트롤러들이 함께 띄워져 시간이 오래 걸린다고 말씀하셨네요. 이런 경우에는 몇 가지 방법을 고려해볼 수 있습니다.

  1. 테스트 더블(Test Double) 활용: 모킹한 서비스와 레포지토리 대신 가벼운 테스트 더블을 사용하여 테스트를 수행할 수 있습니다. 예를 들어, Mockito 등의 라이브러리를 활용하여 더 가볍고 빠른 모킹을 할 수 있습니다.

  2. 슬라이스 테스트(Slice Test): 통합 테스트 대신 해당 컨트롤러와 관련된 슬라이스(예를 들어, 웹 레이어 슬라이스)만 테스트하는 방법을 고려해볼 수 있습니다. 슬라이스 테스트는 단위 테스트와 통합 테스트 사이의 중간 정도로 구성된 테스트이며, 테스트 컨텍스트의 부하를 상대적으로 줄일 수 있습니다.

  3. 병렬 실행: 대규모 테스트를 수행하는 경우에는 테스트를 병렬로 실행하여 시간을 단축할 수 있습니다. 예를 들어, JUnit의 @TestExecutionListeners를 사용하여 병렬 실행을 설정할 수 있습니다.

  4. 테스트 범위 조정: 단위 테스트의 목적에 따라서는 불필요한 컴포넌트까지 테스트하는 것이 아니라, 해당 컨트롤러와 밀접한 관련이 있는 컴포넌트만 테스트하는 방법을 고려해볼 수 있습니다.

위의 방법들을 적절히 활용하여 테스트 시간을 단축시킬 수 있습니다. 여러 방법 중에서 프로젝트에 맞는 방법을 선택하셔서 사용해보시면 좋겠네요. 추가로 궁금한 점이 있으면 언제든지 물어보세요. 좋은 결과 있기를 바라요. 더 도움이 필요하시다면 다른 질문도 환영합니다. 감사합니다!

private 상수 테스트 관련 질문

0

83

1

void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??

0

125

2

커버리지는 어떻게 활용하시는지 궁금합니다.

0

159

2

테스트 문서화 질문입니다

0

104

2

단위테스트 질문이 있습니다

0

95

2

컨트롤러는 모킹을 한 이유가 궁금합니다.

0

100

2

ERD 가장자리에 있는 도메인 테스트 질문

0

87

2

DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?

0

134

2

OrderCreateRequest DTO에 대해서 궁금한점

0

101

2

고전파의 테스트 대역 사용 대상, 공유 의존성

0

154

2

계층 관련 질문이 있습니다.

0

137

3

'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다

1

123

2

혹시 update 로직은 어떻게 테스트하나요? (@Setter?)

0

133

2

단위테스트와 통합테스트의 경계가 궁금합니다.

0

228

2

Service+Repository 통합테스트 관련 질문입니다.

0

150

2

OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요

0

183

2

test 용 .yml

0

89

2

throws Exception

0

78

2

카페키오스크 클래스 문의 ,,

0

87

2

Rest docs 문서용 테스트코드를 따로 작성해야 되나요?

0

172

2

테스트 코드에서 필요한 생성자

0

138

1

tearDown 순서

0

115

2

@Builder 생성자 private

0

135

2

@DisplayName gradle / intellJ

0

93

2