인프런 커뮤니티 질문&답변

kamser님의 프로필 이미지
kamser

작성한 질문수

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

TestFixture에 질문이 있습니다.

해결된 질문

작성

·

203

1

테스트에서 사용하는 빌더 매서드를 한 곳에 모아놓으면 오히려 유지보수가 어렵고 매번 새롭게 만들게 된다고 하셨습니다.

 

그리고 매서드를 만들때 테스트 검증이나 테스트에 필요한 인수만 외부로 들어내서 테스트의 목적을 명확하게 들어내는게 좋다고 하셨는데

 

만약 테스트 케이스마다 외부로 들어내는게 제각각 다른 경우에 하나의 테스트 클래스에 다양한 빌더 매서드들이 생기게 된다면 그것도 관리하는데 어려움이 발생할 거라 생각합니다.

 

이런 경우에는 하나의 빌더 매서드만 생성해서 사용하시나요 ?

아니면 그렇게 많이 발생할 일이 없기 때문에 매번 테스트에 필요한 빌더 매서드들을 만드시나요?

 

답변 2

2

박우빈님의 프로필 이미지
박우빈
지식공유자

안녕하세요, kamser 님! :)

말씀하신 마지막 내용 중 강의 중 의도한 것은 후자, 즉 클래스 당 생성되는 빌더 메서드가 종류별로 그렇게 많지는 않을 것임을 염두에 두고 가이드 드린 것이었는데요.
만약 한 곳에서 관리하고 싶다면 방법이 있긴 합니다.

TestFixture 생성 담당 공통 클래스에서는 도메인 별로 딱 하나의 빌더, 즉 build()를 호출하기 전 상태로 Builder를 만들어서 반환하도록 합니다.
이 때 필수 필드를 제외한 모든 필드는 도메인에 맞는 기본값으로 채워넣습니다.
테스트 클래스에서는 해당 Builder를 받아, 수정을 원하는 필드에 대해서는 값을 다시 채워넣고 build()를 호출하면 그에 맞게 필드 값이 오버라이드 되기 때문에, 빌더는 하나만 유지하면서 테스트 케이스마다 원하는 값을 가진 fixture를 만들어서 사용할 수 있습니다.

비슷하게 실제로 제가 코틀린을 사용할 때에는, 코틀린에서 디폴트 파라미터 를 지원하기 때문에 TestFixture 생성 담당 공통 클래스에서는 모든 파라미터에 기본값이 채워진 생성자(메서드)를 제공하고, 테스트 클래스에서 상황에 맞게 네임 파라미터를 지정하여 fixture를 만드는 방법을 사용합니다.

설명이 길었는데, 둘 중 어느 방법을 쓰시던 함께 협업하는 팀 내에서 우리 팀의 도메인 특성과 상황에 맞게 충분히 논의하고, 결정한 내용을 바탕으로 컨벤션화 하는 것이 중요하다고 할 수 있겠습니다.

감사합니다. :)

0

안녕하세요, 인프런 AI 인턴입니다.

네 맞습니다, 테스트 고유의 목적에 따라 필요한 인수를 외부로 노출하여 명확성을 높이는 것은 중요합니다. 그러나 각각의 테스트 케이스마다 다양한 빌더 메서드를 생성하게 되면 관리 측면에서 복잡성이 발생할 수 있어요.

각 테스트 케이스가 서로 다른 인수를 필요로 하는 경우 이를 간결하게 관리하는 여러 방법이 있을 수 있습니다. 예를 들어, 하나의 범용 빌더 메서드를 만들고 이 메서드에서 선택적으로 인수를 설정할 수 있게 하여 유연성을 제공하거나 빌더 패턴을 활용할 수도 있습니다.

또는 테스트 케이스가 너무 다양한 인수를 필요로 하여 한 빌더 메서드로는 관리가 힘들다면, 공통적으로 사용되는 몇 가지 기본 빌더 메서드를 제공하고, 특정 테스트 케이스에서만 필요한 인수가 있는 경우에는 별도의 빌더 메서드를 추가로 만드는 방법을 선택할 수도 있습니다.

실제로 이러한 결정은 테스트의 복잡성, 테스트 유지 보수 필요성, 그리고 개발자의 선호도에 따라 달라질 수 있습니다. 가장 중요한 것은 테스트 코드의 가독성과 유지 보수성을 높이는 방향으로 접근하는 것입니다.

이 관련하여 더 자세한 내용을 알고 싶으시다면 Spring Boot 공식 문서의 테스트 관련 섹션을 참조하시는 것도 좋을 것 같습니다. 아래 링크에서 시작하는 것을 추천드려요:

I hope this helps you to structure your tests more effectively.

kamser님의 프로필 이미지
kamser

작성한 질문수

질문하기