테스트 명세와 테스트 오라클
Prof. Jong Min Lee이(가) 하루 전에 추가함
pytest
는 Python 기반의 테스트 자동화 도구로, 테스트 명세와 테스트 오라클을 코드로 자연스럽게 구현할 수 있게 도와줘요. 각각이 어떻게 작동하는지 예제를 통해 설명해볼게요.
1. 테스트 명세(Test Specification) in pytest
¶
테스트 명세는 테스트의 입력값, 사전 조건, 실행 절차, 기대 결과를 정의하는 부분이에요. pytest
에서는 보통 테스트 함수와 fixture를 통해 이 명세를 코드로 표현합니다.
import pytest
# 사전 조건: 로그인에 사용할 사용자 정보
@pytest.fixture
def valid_user():
return {"username": "jong", "password": "secure123"}
# 테스트 명세: 로그인 성공 시 환영 메시지를 반환해야 함
def test_login_success(valid_user):
result = login(valid_user["username"], valid_user["password"])
assert result == "Welcome, jong!"
여기서 valid_user
는 사전 조건, login()
함수는 테스트 대상, assert
구문은 기대 결과를 표현하고 있어요.
2. 테스트 오라클(Test Oracle) in pytest
¶
테스트 오라클은 실제 결과가 기대 결과와 일치하는지 판단하는 로직이에요. pytest
에서는 assert
문이 바로 이 역할을 합니다.
def test_addition():
actual = add(2, 3)
expected = 5 # 오라클 역할
assert actual == expected
또는 복잡한 오라클이 필요한 경우, 별도의 함수로 정의할 수도 있어요:
def is_valid_email_format(email):
return "@" in email and "." in email
def test_email_validation():
email = "jong@example.com"
assert is_valid_email_format(email)
이처럼 오라클은 단순한 값 비교부터, 복잡한 조건 판단까지 다양하게 구현될 수 있어요.
자동화 테스트에서의 흐름 요약¶
- 테스트 명세: 어떤 입력을 주고, 어떤 결과를 기대하는지 정의
- 테스트 오라클: 실제 결과가 기대와 일치하는지 판단 (
assert
또는 별도 로직) - pytest: 이 모든 과정을 자동으로 실행하고 결과를 리포트