inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

단위 테스트에 대한 질문 fake, h2

138

yacheku

작성한 질문수 1

0

 안녕하세요 테스트 코드에 대해 고민이있는 학생입니다.

단위테스트에 대한 질문을 하고싶습니다!

 

저는 단위테스트를 h2를 이용하지않고 fake repo를 만들어서 테스트하였고

 

통합테스트할때는 h2를 이용해서 테스트하였는데

테스트 강의하시면서 강조하셧던 부분이 테스트하는것도 비용이다!

그래서 스프링서버를 띄우는것을 extends해서 통합하여 관리하셨던것이 굉장히 큰 도움이되었습니다.

 

그렇다면

  1. 단위테스트할때 fake Repo를 커스텀하는 노력만 조금 들인다면 단위 테스트에대한 속도도 더빨라질거라 생각하는데 어떻게 생각하시나요?

  2. fake repo를 만들때 list, map, set 중에 저는 map을선택하였는데 혹시 어떤것을 사용하시는지?

  3. 테스트 패키지 구조를 통합, 단위 라는 패키지를따로만들어서 넣는것보다
    alt + insert로 만들기 쉽게 같은공간에 단위,통합이 존재하게하면서 Test, IT 라는 네이밍으로 클래스를만들고있는데 ex) OrderServiceTest, OrderServiceIT 우빈님은 어떻게 통합과 단위 패키지구조를 설계하시는지 궁금합니다.

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

답변 2

0

박우빈

안녕하세요, yacheku 님!

 

1. 단위테스트할때 fake Repo를 커스텀하는 노력만 조금 들인다면 단위 테스트에대한 속도도 더빨라질거라 생각하는데 어떻게 생각하시나요?

어떤 형태의 단위 테스트인지, 커스텀을 어떻게 하실지는 모르겠지만, 잘 작성된 단위 테스트는 이미 속도가 충분히 빠른 테스트 방식입니다 ㅎㅎ 더 빠르게 한다고 해서 크게 (체감할 정도로) 효용성이 있을 것 같지는 않아요 🙂

 

2. fake repo를 만들때 list, map, set 중에 저는 map을선택하였는데 혹시 어떤것을 사용하시는지?

저는 FakeRepository 자체가 관리 포인트가 된다고 생각하기 때문에 애초에 선호하는 방법은 아닙니다만, 사용한다면 탐색 비용을 고려하여 map을 사용할 것 같네요.

 

3. 테스트 패키지 구조를 통합, 단위 라는 패키지를따로만들어서 넣는것보다
alt + insert로 만들기 쉽게 같은공간에 단위,통합이 존재하게하면서 Test, IT 라는 네이밍으로 클래스를만들고있는데 ex) OrderServiceTest, OrderServiceIT 우빈님은 어떻게 통합과 단위 패키지구조를 설계하시는지 궁금합니다.

단위와 통합인지에 따라 패키지를 구분하지는 않습니다. 패키지 구조 관점에서는 어떻게 테스트할 것인지 보다 무엇을 테스트하는지가 더 중요하기 때문에, 테스트 대상인 클래스 기준으로 자연스럽게 패키지를 잡고(프로덕션 코드의 패키지 구조를 그대로 따라가도록), 필요하다면 테스트 클래스 이름만 차이를 줄 것 같아요.

도움이 되셨기를 바랍니다.
감사합니다. 🙂

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. yacheku님 질문에 대한 답변을 드리겠습니다.

  1. 단위 테스트에 Fake Repository 사용: Fake Repository를 이용해 데이터를 저장하고 조회하는 것은 실제 데이터베이스 접근을 피하면서도 빠른 속도로 테스트를 진행할 수 있게 합니다. 이러한 접근 방식은 단위 테스트의 속도를 크게 향상시킬 수 있습니다. 프로덕션 데이터베이스가 아닌 가벼운 컬렉션(List, Map 등)을 사용하여 동작을 모사하는 방식은 실제 데이터 처리 로직을 검증하기에 충분히 유효합니다.

  2. Fake Repository에 사용할 컬렉션: Map을 선택하신 것은 좋은 판단입니다. Map은 데이터의 Key-Value 구조로 관리가 용이하고, 특정 엔티티를 ID나 고유 식별자로 관리하기에 적합합니다. 반면, List는 데이터 순서에 민감하고, 특정 요소를 빠르게 조회하는 데에는 다소 비효율적일 수 있습니다. Map을 사용하면 조회, 삽입, 삭제 등의 연산이 상대적으로 빠르기 때문에 효율적입니다.

  3. 테스트 패키지 구조: 테스트 클래스와 통합 테스트 클래스를 하나의 공간에 두되, 네이밍 규칙을 통해 구분하는 방식을 택하셨군요. OrderServiceTestOrderServiceIT처럼 명명하여 단위 테스트와 통합 테스트를 구분짓는 것은 프로젝트 관리에 있어 효과적일 수 있습니다. 이렇게 하면 특정 클래스의 모든 테스트를 한눈에 파악할 수 있고, 필요할 때 특정 유형의 테스트만 빠르게 실행할 수 있다는 장점이 있습니다.

마지막으로, 다음 링크들을 참고하시면 비슷한 주제의 논의를 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

private 상수 테스트 관련 질문

0

82

1

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

0

124

2

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

0

159

2

테스트 문서화 질문입니다

0

104

2

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

0

94

2

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

0

100

2

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

0

86

2

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

0

131

2

OrderCreateRequest DTO에 대해서 궁금한점

0

101

2

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

0

154

2

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

0

137

3

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

1

122

2

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

0

133

2

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

0

226

2

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

0

149

2

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

0

183

2

test 용 .yml

0

89

2

throws Exception

0

78

2

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

0

87

2

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

0

171

2

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

0

136

1

tearDown 순서

0

114

2

@Builder 생성자 private

0

133

2

@DisplayName gradle / intellJ

0

91

2