프로젝트

일반

사용자정보

테스트 명세와 테스트 오라클

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)

이처럼 오라클은 단순한 값 비교부터, 복잡한 조건 판단까지 다양하게 구현될 수 있어요.


자동화 테스트에서의 흐름 요약

  1. 테스트 명세: 어떤 입력을 주고, 어떤 결과를 기대하는지 정의
  2. 테스트 오라클: 실제 결과가 기대와 일치하는지 판단 (assert 또는 별도 로직)
  3. pytest: 이 모든 과정을 자동으로 실행하고 결과를 리포트