자동화가 불가능한 코드는 자동화 테스트 하지말자
test-humility 글에 많은 영향을 받았다.
앞선 글에서 테스트 하기 힘든 코드를 어떻게 개선할 수 있는지에 대한 설명했다.
테스트에 대해 아무런 지식없이 테스트 코드를 작성하려고 했을 때 처음 느낀 감정이 '거의 모든 Function이 DB에서 데이터를 불러와서 로직을 실행하거나 데이터를 저장하는건데 이걸 어떻게 테스트하지...' 였다.
=> 앞선 글처럼 테스트 코드를 작성하기 쉽도록 코드를 수정해야 하는 문제다.
그렇다면 앞선 예시의 DB에 레코드를 저장하는 Function(createUser)은 어떻게 테스트 할까? 아래 코드를 보자
async function createUser(name:Name, email:Email) {
return await userRepository.create(name.toString(), email.toString());
}
정답은 자동화 테스트를 수행하지 않는 것 이라 생각한다. 다시 말하지만 테스트를 하지 말라는 것이 아니라 "자동화" 테스트를 하지 말자는 것이다.
사실 위의 경우는 어느 정도 자동화 시킬 수 있다. 과거에야 어땠는지 몰라도 메모리 위에 DB를 구축하거나 Docker로 DB를 가상화해서 사용하기 같은 방법들을 고려해 볼 수 있다. 그러나 여전히 좋은 테스트는 아니라고 생각한다.
그렇다면 이 코드는 어떤가? (SendBird API를 이용해서 채팅 메세지를 보내는 코드)
async function sendMessage(message, userId) {
return await sendBirdSDK.send(message, userId)
}
이 코드는 사실상 테스트 할 수 없다. 내 코드에 아무런 문제가 없더라고 타사의 코드에 문제가 있으면 문제가 있는 코드가 되어버리기 때문이다.
테스트에 대해서 공부하기 전에는 외부에 영향을 주는 코드를 테스트 할때 어떻게 하면 자동화 시킬 수 있을지를 열심히 고민했다. 그러다 참고글을 보고는 나아가야 할 길을 알게되어 무척 기뻣다.
테스트가 어려우면 테스트하지마라. 단, 그 코드는 최대한 겸손(humility)해야 한다.
'Test' 카테고리의 다른 글
테스트하기 좋은 코드 작성 (0) | 2025.03.07 |
---|---|
테스트하기 좋은코드, 안좋은 코드 (0) | 2025.03.07 |