inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Spring Boot TDD - 입문부터 실전까지 정확하게

69.테스트격리 / 과도한 테스트 격리의 문제 중 '부적절한 설계 왜곡'

해결된 질문

81

송진우

작성한 질문수 13

1

과도한 테스트 격리의 문제점 중 '부적절한 설계 왜곡'의 예시로

1) new 연산자로 직접 만들어도 좋은 클래스 인스턴스를 굳이 주입,

2) 클래스 의존을 인터페이스 의존으로 변경,

3) private을 public으로 변경

을 들어주셨는데 다음과 같은 상황을 말씀하시는게 맞는지 궁금합니다.

 

강의 잘 듣고 있습니다. 감사합니다.

tdd spring-boot 아키텍처 junit

답변 2

1

이규원

백엔드해야지님 안녕하세요. 우선 강의 수강해주셔서 감사드립니다!

말씀하신 부분의 제 의도를 정확히 이해하신 것으로 생각됩니다. 🙂

1번에 대해서 조금 부가 설명을 드려보면, A 클래스에 코드가 늘어나서 일부 코드를 B 클래스로 분리하면 어떤 분들은 B 클래스에 대한 인터페이스를 만들어서 B 클래스를 주입하도록 하기도 합니다. 그러면 B 클래스는 A 클래스의 변형된 구현 설계임에도 public으로 노출되고 A 클래스의 관계가 복잡해 집니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
백엔드해야지 님의 질문에 답변드리겠습니다.

과도한 테스트 격리에 대한 문제점, 특히 ‘부적절한 설계 왜곡’의 예시는 백엔드해야지 님께서 관찰하신 상황과 잘 맞아 보입니다. 아래 각각의 상황을 좀 더 설명드리겠습니다:

  1. new 연산자로 직접 만들어도 좋은 클래스 인스턴스를 굳이 주입 & 클래스 의존을 인터페이스 의존으로 변경:

    • 테스트 환경에서 의존성을 주입받아 mock으로 대체하려는 경우를 들 수 있습니다. 특정 의존성이 단순한 구현체나 직접 생성 가능한 경우에도, 테스트의 독립성을 위해 과도하게 주입받아 사용하는 사례를 얘기하시는 것 같습니다. 이는 테스트 격리를 위한 설계이지만, 실제 코드를 복잡하게 만들고 불필요한 추상화를 유발할 수 있습니다.
  2. private을 public으로 변경:

    • 주로 테스트의 목적을 위해 접근 제한자를 변경하는 경우가 이에 해당합니다. 특정 메서드가 클래스 내부에서만 사용되지만, 이 메서드를 테스트하기 위해 public으로 변경한다면 이는 코드의 캡슐화를 무너뜨릴 수 있습니다. 이로 인해 테스트를 위해 코드의 자연스런 설계를 왜곡할 위험이 있습니다.

이러한 예시는 테스트를 위해 본래 설계 의도와 달리 코드의 구조나 접근성을 변화시킬 때 생길 수 있는 문제입니다. 본 강의에서 언급된 내용과 일치하는 것 같습니다. 강의를 잘 청취하고 계신 것 같아 기쁩니다. 추가 질문이 있으시다면 언제든지 문의해 주세요!

참고 자료: “Spring Boot Reference Documentation - Testing”

라우팅 테이블 설정 중 궁금한게 있습니다.

0

26

1

10년간 CTO 활동을 하신 부분에 대한 질문

1

97

2

테스트 시나리오 유효하지 않은 경우는 언제 도출하나요?

1

107

2

테스트 클래스명 을 강의처럼 만드신 이유가 따로 있을까요?

1

121

2

현업에서도 현재와 같은 방식? 으로 TDD를 하는것이 일반적인가요??

1

116

1

아키텍처와 TDD의 오해에 대해 질문드립니다.

1

116

2

임의데이터 generator방식과 @Transactional에 대한 고찰

1

75

2

내부 설계에 의존하는 테스트 관련 질문 드립니다.

1

81

2

테스트 시나리오 관련 질문 드립니다.

1

76

2

@SpringBootTest 어노테이션의 classes 관련 질문 드립니다.

1

68

2

거짓 음성, 거짓 양성 관련 질문 드립니다.

1

86

1

30. 누락된 테스트 시나리오 발견

1

79

2

"오해: 단위 테스트와 통합 테스트를 잘 분리해야한다." 에 대한 질문

1

798

2

아키텍처 개선

1

119

1

병렬 처리 시 질문

0

110

2

assertThat 상태 코드 비교

1

84

1

테스트 격리에서 테스트 랜덤 실패 이유

0

101

2

테스트 코드 작성 범위 고민

1

241

3

질문드립니다.

2

106

1

거짓 양성, 거짓 음성 질문

2

159

2

cqrs 명령 아키텍처 개선 질문

1

147

2

거짓 양성 감지 노하우 질문입니다

4

790

2

질문드립니다.

1

152

2

프로젝트 규모가 큰 경우 @SpringBootTest 실행 속도 문제

2

1615

1