본문 바로가기
javascript pure/javascript 코어 개념

34. 테스트(Test) - 1

by leo2114 2024. 2. 17.
반응형

유닛 테스트(Unit Testing)와 통합 테스트(Integration Testing)의 차이

소프트웨어 테스트는 소프트웨어 개발 과정에서 중요한 부분을 차지합니다. 그 중에서도 유닛 테스트와 통합 테스트는 매우 중요한 역할을 합니다. 이들 간의 차이를 살펴보겠습니다.

유닛 테스트(Unit Testing)

유닛 테스트는 소프트웨어의 가장 작은 단위인 "유닛"을 테스트하는 것입니다. 유닛은 주로 함수 또는 메소드와 같은 개별적인 코드 블록을 의미합니다. 유닛 테스트는 이러한 개별적인 코드 블록이 예상대로 동작하는지 확인하는 것을 목표로 합니다.

유닛 테스트의 특징:

  • 개별적인 코드 블록을 대상으로 함
  • 모의 객체(Mock Object)를 사용하여 의존성을 분리함
  • 빠르게 실행되며 반복적으로 실행 가능함
  • 테스트가 성공하더라도 외부 시스템과의 상호작용은 포함하지 않음

코드 예제:

// 유닛 테스트 예제
function add(a, b) {
  return a + b;
}

// 테스트 코드
test('add 함수가 올바르게 동작하는지 확인', () => {
  expect(add(1, 2)).toBe(3);
});

통합 테스트(Integration Testing)

통합 테스트는 여러 개의 유닛이 함께 동작하는 상황을 테스트합니다. 즉, 유닛들 간의 상호작용과 데이터 흐름을 테스트합니다. 통합 테스트는 각각의 유닛이 아닌 시스템 전체의 동작을 확인합니다.

통합 테스트의 특징:

  • 다수의 유닛이 함께 동작하는 상황을 대상으로 함
  • 실제 데이터베이스, 외부 API 등과의 상호작용을 포함함
  • 테스트 환경을 설정하는 데 시간이 오래 걸릴 수 있음
  • 통합 테스트가 실패할 경우 해당 시스템의 일부 또는 전체가 잘못됐을 가능성이 높음

코드 예제:

// 통합 테스트 예제
function calculateTotalPrice(products) {
  let totalPrice = 0;
  for (const product of products) {
    totalPrice += product.price;
  }
  return totalPrice;
}

// 테스트 코드
test('calculateTotalPrice 함수가 제품의 총 가격을 올바르게 계산하는지 확인', () => {
  const products = [{ name: 'Apple', price: 1 }, { name: 'Banana', price: 2 }];
  expect(calculateTotalPrice(products)).toBe(3);
});

결론

유닛 테스트와 통합 테스트는 각각 소프트웨어의 다른 측면을 테스트합니다. 유닛 테스트는 개별적인 코드 블록의 동작을 확인하고, 통합 테스트는 시스템 전체의 동작을 확인합니다. 두 테스트 방법을 조합하여 소프트웨어의 신뢰성을 높일 수 있습니다.

반응형