학습
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
코드 한 줄씩 동작 설명
class Calculator: Calculator라는 클래스를 정의합니다.def add(a, b): 두 개의 숫자를 더하는 메서드를 정의합니다.require 'rspec': RSpec 라이브러리를 불러옵니다.RSpec.describe Calculator do: Calculator 클래스에 대한 테스트를 시작합니다.it '두 숫자를 더한다' do: 테스트의 목적을 설명합니다.calc = Calculator.new: Calculator의 새로운 인스턴스를 생성합니다.expect(calc.add(2, 3)).to eq(5): 2와 3을 더한 결과가 5인지 확인합니다.- 테스트는 코드의 품질을 보장하는 필수적인 과정입니다.
- 단위 테스트는 개별 함수의 기능을 검증하며, 통합 테스트는 여러 단위의 상호작용을 검증합니다.
- RSpec을 사용하여 Ruby에서 테스트를 작성할 수 있습니다.
- 다음으로 학습할 주제로는 "테스트 주도 개발(TDD)"를 추천합니다. TDD는 테스트를 먼저 작성하고 그에 맞춰 코드를 작성하는 개발 방법론입니다.
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