Replies: 1 comment
-
|
어제 토의한 내용을 Discussion에 정리했습니다~ 제가 잘못 이해하고 작성한 부분이랑 빼먹은 내용이 있다면 comment 달아주시면 수정하도록 하겠습니닷 !! 😀 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
서론
두레 프로젝트를 시작하기 전 테스트 코드 컨벤션에 대해서 논의하게 되었습니다. 논의 사항 중 Test Fixture 사용 여부에 관해서 토의하게 되었는데 아래에서 Test Fixture가 무엇이고 어떤 Fixture를 사용하도록 결정했는지에 대해서 정리했습니다.
Test Fixture
Test Fixture란 중복적으로 수행하는 행위를 고정시켜 한 곳에서 관리하는 개념입니다. 처음 이 개념을 들었을 때 굉장히 생소했지만, 예시 코드를 봤을 때 과거 프로젝트에서도 Test Fixture를 사용하고 있었다는 것을 알게 되었습니다.
테스트 코드를 작성할 때 Fixture를 사용하지 않고 일일이 객체를 생성하는 경우 다음과 같은 단점이 있습니다.
위와 같은 단점을 없애기 위해 중복으로 발생하는 객체 생성을 한 곳에 고정시켜 관리하는 것이 Test Fixture 입니다.
여러 Test Fixture의 장단점 비교
Builder 패턴을 적용하지 않은 Test Fixture
Builder 패턴을 적용한 Test Fixture
위의 두 예시 코드를 살펴보시면 가장 큰 차이점은 빌더 패턴 적용 유무입니다. 첫 번째 코드는 빌더 패턴을 적용하지 않고 가장 많이 사용되는 다수의 객체를 만들어 두고 있고 두 번째 코드는 빌더 패턴을 적용하고 하나의 디폴트 객체를 만들 수 있고 변경하고 싶은 필드는 수정할 수 있도록 되어있습니다.
첫 번째 Test Fixture를 사용할 경우 장점
첫 번째 Test Fixture를 사용할 경우 단점
빌더 패턴이 들어간 Test Fixture를 사용할 경우에는 코드가 굉장히 길어집니다. Merit 도메인의 경우 50줄이고 빌더 패턴이 들어가지 않은 코드는 7줄입니다. 약 7배 정도의 길이 차이가 납니다.(컬럼 개수가 동일하지 않지만 빌더 패턴의 단점 중 하나가 바로 코드 양이 많다는 점 입니다.)
또, 빌더 패턴이 들어간 코드는 통합 테스트 환경이었기 때문에 실제 DB와 통신을 맺고 객체를 반환할 때 저장까지 하는 과정을 거칩니다. 이렇게 되면 모킹을 통한 테스트가 불가능하고 테스트 시간이 길어진다는 단점이 존재합니다.
최종 Test Fixture
서로의 장점을 취한 방식은 아래와 같습니다.
결론
Test Fixture는 중복적으로 수행하는 행위를 고정시켜 한 곳에서 관리하는 개념입니다. 따라서 구현 방식은 여러가지가 있습니다. 대표적으로 Builder 패턴을 적용하지 않은 코드와 적용한 코드가 있었고 각각의 장단점에 대해서 알아봤습니다.
두레 프로젝트에서는 두 코드의 장점을 합친 형태의 Test Fixture를 사용하도록 결정이 되었습니다.
참고 자료
아마란스님의 Test Fixture 발표 자료
과거 KEEPER R2 프로젝트의 Test Fixture 코드
Beta Was this translation helpful? Give feedback.
All reactions