IMCAT.DEV
로그인 가입
Ruby 입문 테스트

Ruby 기초적인 테스트 작성

Ruby 기초적인 테스트 작성 — 초급

기초적인 테스트 작성

1. 도입 (왜 배워야 하는가)

소프트웨어 개발에서 테스트 작성은 필수적인 과정입니다. 이는 코드의 품질을 보장하고, 유지보수를 쉽게 하며, 새로운 기능 추가 시 기존 코드의 기능이 망가지는 것을 방지하는 역할을 합니다. 테스트가 없으면, 개발자가 작성한 코드가 의도한 대로 동작하는지 확인할 수 없고, 버그가 발생했을 때 원인을 찾기가 어려워집니다. 결국, 이로 인해 비즈니스의 신뢰성과 효율성이 저하되며, 시간과 비용이 증가하는 결과를 초래할 수 있습니다.

2. 핵심 개념 설명

테스트

코드가 의도한 대로 작동하는지를 확인하기 위해 작성하는 코드입니다. 마치 수학 문제를 풀고 답이 맞는지 확인하는 것과 비슷합니다.

단위 테스트 (Unit Test)

개별 단위(즉, 함수나 메서드)의 기능을 검증하는 테스트입니다. 이 테스트는 작은 부분부터 검증하여 전체 시스템의 안정성을 높이는 데 기여합니다.

통합 테스트 (Integration Test)

여러 단위가 함께 작동하는지 확인하는 테스트입니다. 예를 들어, 쇼핑몰의 장바구니 기능은 상품 선택, 결제 처리 등 여러 단위가 연계되어 작동하므로 통합 테스트가 필요합니다.

용어정의
테스트코드의 올바른 동작 여부를 검증하는 것
단위 테스트개별 함수나 메서드의 기능을 검증하는 테스트
통합 테스트여러 단위의 상호작용을 검증하는 테스트

3. 기본 코드 예제

아래는 Ruby에서 단위 테스트를 작성하는 가장 기본적인 예입니다. Ruby에서는 RSpec이라는 테스트 프레임워크를 많이 사용합니다.

# Calculator 클래스 정의
class Calculator
  def add(a, b)
    a + b
  end
end

# RSpec 테스트 정의
require 'rspec'

RSpec.describe Calculator do
  it '두 숫자를 더한다' do
    calc = Calculator.new
    expect(calc.add(2, 3)).to eq(5) # 2와 3을 더하면 5가 되어야 한다
  end
end

실행 결과

Calculator
  두 숫자를 더한다

Finished in 0.00123 seconds (files took 0.123 seconds to load)
1 example, 0 failures

코드 한 줄씩 동작 설명

  1. class Calculator : Calculator라는 클래스를 정의합니다.
  2. def add(a, b) : 두 개의 숫자를 더하는 메서드를 정의합니다.
  3. require 'rspec' : RSpec 라이브러리를 불러옵니다.
  4. RSpec.describe Calculator do : Calculator 클래스에 대한 테스트를 시작합니다.
  5. it '두 숫자를 더한다' do : 테스트의 목적을 설명합니다.
  6. calc = Calculator.new : Calculator의 새로운 인스턴스를 생성합니다.
  7. expect(calc.add(2, 3)).to eq(5) : 2와 3을 더한 결과가 5인지 확인합니다.
  8. 4. 실전 활용 예제

    예제 1: 쇼핑몰 장바구니 기능

    장바구니에 상품을 추가하는 기능을 테스트하는 예제입니다.

    class Cart
      def initialize
        @items = []
      end
    
      def add_item(item)
        @items << item
      end
    
      def items
        @items
      end
    end
    
    RSpec.describe Cart do
      it '상품을 장바구니에 추가한다' do
        cart = Cart.new
        cart.add_item("사과")
        expect(cart.items).to include("사과") # 장바구니에 사과가 포함되어야 한다
      end
    end

    예제 2: 사용자 로그인 기능

    사용자의 로그인 기능을 테스트하는 예제입니다.

    class User
      attr_accessor :username, :password
    
      def login(input_username, input_password)
        input_username  @username && input_password  @password
      end
    end
    
    RSpec.describe User do
      it '사용자가 올바르게 로그인한다' do
        user = User.new
        user.username = "test_user"
        user.password = "secure_password"
        expect(user.login("test_user", "secure_password")).to be true
      end
    end

    5. 흔한 실수와 주의사항

    실수 1: 테스트를 작성하지 않기

    잘못된 코드:

    # 테스트 없이 코드 작성
    calc = Calculator.new
    puts calc.add(2, 3)

    올바른 코드: 테스트를 작성하여 코드의 안정성을 보장합니다.

    실수 2: 예상 결과를 잘못 설정하기

    잘못된 코드:

    expect(calc.add(2, 3)).to eq(6) # 6이 아니라 5가 되어야 함

    올바른 코드:

    expect(calc.add(2, 3)).to eq(5) # 2와 3을 더한 결과는 5

    6. 정리

    • 테스트는 코드의 품질을 보장하는 필수적인 과정입니다.
    • 단위 테스트는 개별 함수의 기능을 검증하며, 통합 테스트는 여러 단위의 상호작용을 검증합니다.
    • RSpec을 사용하여 Ruby에서 테스트를 작성할 수 있습니다.
    • 다음으로 학습할 주제로는 "테스트 주도 개발(TDD)"를 추천합니다. TDD는 테스트를 먼저 작성하고 그에 맞춰 코드를 작성하는 개발 방법론입니다.