테스트는 어떻게 하는게 좋을까?
🔔 테스트 방법
테스트 방법
새로운 기능을 개발하거나 수정할 때, 내가 원하는 시나리오대로 동작을 하는지 검증하는 과정은 필요하다. 그것을 위해 테스트 과정이 있고 원하는 상황에 원하는 결과가 나오는지 판단해봐야 한다. 어디까지 테스트를 해야하는지는 각 상황마다 다르겠지만 내가 이전 회사에서 테스트할 때 꼭 확인했던 부분은 아래와 같다.
- 브라우저 환경(Chrome, Edge, IE 등)
- 운영/개발 환경
- 로그인/비로그인
위 항목을 포함하여 상황별 테스트 케이스를 작성하고 테스트를 했었지만 효율적인 테스트 코드를 작성한 것이 아니었다. dev 서버는 해당 서버에 소스를 올린 후에 테스트했었는데 하나라도 잘못된 결과가 나오면 다시 재커밋 후 테스트를 진행했다. 로컬도 마찬가지이지만 이처럼 테스트 코드를 작성하면서 테스트하는 환경이 아니었기 때문에 검증 과정이 불편했다.
테스트를 제대로 하려면?
테스트는 크게 단위 테스트와 통합 테스트로 나눌 수 있다. 단위 테스트는 개별 메서드나 클래스를 테스트하여 각 단위가 예상대로 동작하는지 검증하는 것이고, 통합 테스트는 여러 단위들이 함께 작동하여 전체 시스템이 기대하는대로 동작하는지 검증한다.
어썰션(Assertions)은 테스트에서 특정 조건이 참인지 확인하는 구문이다. 테스트의 성공 여부를 판단하는 요소로, 기대하는 결과와 실제 결과를 비교하여 테스트가 통과했는지 실패했는지를 결정한다.
- assertEquals(expected, actual)
- assertNotEquals(unexpected, actual)
- assertTrue(condition)
- assertFalse(condition)
- assertNull(object)
- assertNotNull(object)
단위 테스트
단위 테스트에서는 외부 의존성을 모킹(Mock)하거나 스텁(Stub)을 사용하여 독립적으로 수행된다.
모킹은 테스트 대상 코드가 의존하는 외부 컴포넌트의 행동을 동적으로 정의하고, 호출 여부나 횟수 등을 검증할 수 있다. 따라서 상태 검증보다는 행동 검증에 중점을 둔다.
스텁은 테스트 대상 코드가 의존하는 외부 컴포넌트의 대체 구현체를 제공하여, 특정 입력에 대해 미리 정의된 출력을 반환한다. 주로 고정된 응답을 제공하여 상태 검증에 중점을 둔다.
통합 테스트
여러 단위의 테스트를 통합적으로 검증하기 때문에 단위 테스트보다 실행 속도가 느리지만 전체 흐름에 대한 테스트를 검증할 수 있다.