개발자
일반적으로 외부 의존성을 제외한 테스트, 로직만 테스트 하는 것을 단위테스트라고 하며 Network가 연결되어있지 않더라도 테스트가 통과되어야 한다고 알고 있습니다. 근데 cloud db를 사용하는데 단위테스트라고 혼용해서 말하시더라구요... 제가 잘못 이해하고 있나 싶어 질문드립니다.
답변 3
인기 답변
개발자들은 그래도 나름 객관적이고 이성적으로 데이터를 기반으로 판단하는 기특함이 조금은 더 있습니다만, 그래도 인간인데다, 어디 그렇게 명확히 합의된 정의 없이 이래저래 쓰는 것들이 있습니다. 예를들어, 어떤 사람은 단위테스트와 기능테스트 통합 테스트들을 구분짓고 어떤 명확한 기준을 정해 따르긴 하겠지만, 그 정의는 어떤 문서를 기준으로 해야 할까요? 다들 그렇게 한다라는 기준처럼 모호한게 없습니다. 그 다들은 내가 생각하는, 내가 접한 주변의 사람들이나 글들 따위에서 비롯된 것이고, 그 자료들이 또 수두룩빽빽하고, 사람마다 접한 자료가 조금씩 다르기 마련입니다. 어디 사전에 나왔다면 모를까. 만약 위키페디아에 나온 정의가 있다 할지라도, 그건 내가 위키페디아를 신뢰한다고 하더라도, 딴사람은 그닥 신뢰지 않고 지내는 경우도 있습니다. 암튼, 요지는 질문자님이 잘못이해하고 아니고를 떠나서, 팀마다 적응해야 할 암묵적 합의라는 게 있는 건데, 해당 팀에서 이미 DB연결을 하면서 단위테스트라고 혼용해 쓴다면, 거기에 적응하는 것도 방법입니다. "아 여기서는 DB연결을 포함하고 테스트 하면서도 단위테스트라고 부르는 거구나"라고요. 회사나 팀마다 각자의 jargon들이 있고, 경력사원들도 이직하면 그런 지엽적 용어들을 익히는데 오랜 시간이 필요합니다. 아무리 봐도 뭔가 객관적 자료가 있는 걸 틀리게 얘기한다? 그러면, 잘 적응해 지내다가 질문의 형태로 물어보는 것도 방법입니다. 지적의 형태가 되면 곤란합니다. 오히려 반작용이 일 수 있지요. 요약하면, 제가 보기엔, DB연결 포함한 단위테스트도 무방하고, 질문자님의 기존 지식도 틀리지 않다라고 말씀드리겠습니다. 그런거 맞고 틀리고 논쟁(고민)할 시간에 기능 하나를 더 잘 만듭시다.
단위 테스트는 어떤 프로그램이나 모듈의 가장 작은 부분들 각각에 대해서, 원래 의도한 입력 값의 범위에 대해서 기대되는 출력값을 검사하는 것으로 알고 있습니다. 그래서 보통 함수나 메소드(인터페이스) 하나씩 테스트 대상으로 삼아서, 위의 조건을 만족하는 지 검사합니다. 이렇게 하는 이유는, 인터페이스 하나하나에 대한 디자인 단계 부터 입력과 출력을 확실하게 정해 두려는 것입니다. 결국, 어플리케이션이 인터페이스들의 상호작용에 의해 작동한다는 점을 생각하면, 논리적으로는 입력과 출력의 연쇄에 있어 오류가 없다면, 코드가 잘못되어서 작동이 되지 않는 일이 없을 것이라는 것이 주된 생각입니다. 그러나, 사용자 시나리오나 사용성은 이와 별개로, 각 인터페이스들이 적절하게 연결되어 있고, 또 적절한 시기에 입출력이 이루어지는 지를 테스트 하는 것이므로 단위테스트로는 불가능합니다. 질문 주신 부분으로 돌아가서, 원론적으로는 입력범위에 해당하는 데이터를 제공하는 mocking 을 두고 진행하는 것이 맞습니다. 그러나, mocking 자체를 따로 구축하는 것이 여러 사정에 의해 힘들고, 이미 그 mocking에 해당하는 입력 값을 제대로 주는 것을 cloud db가 보장할 수 있다면, 대체한다고 해도 크게 문제되지는 않습니다. 따라서 해당 db는 data set이 자주 바뀌게 되면, 전제조건, 즉 입력값 범위 문제가 발생할 가능성이 높으므로, test용 data만 들고 있는 형태로 두는 것이 좋을 것으로 생각됩니다.
단위테스트(Unit Test)는 소프트웨어 개발에서 각각의 기능이나 모듈을 개별적으로 테스트하는 것을 말합니다. 단위테스트는 해당 기능이나 모듈의 로직을 독립적으로 테스트하며, 외부 의존성을 최소화하여 실행됩니다. 주로 함수, 메서드, 클래스 등의 작은 단위에 대해 테스트를 수행합니다. 일반적으로 단위테스트에서는 외부 의존성을 가짜 객체(Mock Object)나 스텁(Stub)으로 대체하여 테스트를 진행합니다. 이렇게 하면 외부 환경의 영향을 받지 않고, 테스트의 신뢰성과 격리성을 확보할 수 있습니다. 예를 들어, 네트워크 연결, 데이터베이스 접근, 외부 서비스 호출 등의 외부 요소는 모의 객체 또는 스텁으로 대체하여 로직에 집중된 테스트를 진행합니다. 그러나 cloud db를 사용하는 것을 단위테스트라고 혼용하는 것은 정확한 용어 사용은 아닙니다. 일반적으로 클라우드 데이터베이스와 같은 외부 서비스는 외부 의존성을 가지며, 단위테스트의 범주를 벗어납니다. 이 경우에는 통합테스트(Integration Test) 또는 인수테스트(Acceptance Test) 등의 용어를 사용하여 해당 테스트를 구분하는 것이 좋습니다. 단위테스트는 작은 단위의 로직을 검증하고, 클라우드 데이터베이스와 같은 외부 서비스와의 상호작용을 검증하는 테스트는 다른 유형의 테스트로 분류하여 사용하는 것이 명확하고 일반적인 방법입니다.
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!