[파이썬] pytest 가독성 높은 테스트 코드 작성법

테스트 코드는 소프트웨어 개발에서 중요한 부분입니다. 그렇기 때문에 테스트 코드를 작성할 때 가독성을 높이는 것은 매우 중요합니다. pytest는 파이썬의 인기있는 테스트 프레임워크 중 하나이며, 이 글에서는 pytest를 사용하여 가독성 높은 테스트 코드를 작성하는 방법을 알아보겠습니다.

1. 테스트 함수 네이밍

테스트 함수의 이름은 테스트를 진행하는 항목을 알기 쉽게 표현해야 합니다. snake_case를 사용하고, test_로 시작하는 것을 권장합니다. 예를 들어, test_addition()과 같은 네이밍이 좋은 예입니다.

def test_addition():
    result = 2 + 3
    assert result == 5

2. 설명적인 어서션 메시지

테스트 결과를 검증하는 단언문(assertion)은 가능한한 설명적으로 작성해야 합니다. 이는 테스트가 실패한 경우 어디서 어떤 문제가 발생했는지 파악하기 쉽게 도와줍니다. pytest에서는 assert 문을 사용하여 원하는 메시지를 추가할 수 있습니다.

def test_addition():
    result = 2 + 3
    assert result == 5, "2 + 3 should be 5"

3. 픽스쳐(fixture) 사용

pytest는 픽스쳐(fixture)라는 개념을 제공하여 테스트 실행 전후에 필요한 작업을 수행할 수 있습니다. 픽스쳐를 사용하면 테스트 코드를 간결하게 유지할 수 있고, 코드 재사용성을 높일 수 있습니다. 예를 들어, 테스트를 위해 데이터베이스 연결이 필요한 경우 다음과 같이 픽스쳐를 작성할 수 있습니다.

import pytest

@pytest.fixture
def database_connection():
    # 데이터베이스 연결 설정
    ...

def test_database_query(database_connection):
    # 데이터베이스 쿼리 수행 및 검증
    ...

4. 매개변수화된 테스트

pytest의 매개변수화된 테스트 기능을 사용하면 같은 테스트 함수를 여러 번 실행하면서 다양한 입력 값을 사용할 수 있습니다. 이렇게 함으로써 코드 커버리지를 높이고 테스트 코드의 양을 줄일 수 있습니다.

import pytest

@pytest.mark.parametrize("input1, input2, expected", [
    (2, 3, 5),
    (4, 5, 9),
    (10, 20, 30),
])
def test_addition(input1, input2, expected):
    result = input1 + input2
    assert result == expected

5. 실패한 테스트로부터 성공하는 테스트 작성

pytest를 사용하면 실패한 테스트가 성공하는 테스트로 바뀔 때까지 작성 및 수정할 수 있습니다. 이 기능을 활용하여 먼저 실패하는 테스트를 작성하고, 이를 기반으로 테스트를 성공하게끔 코드를 작성하는 것이 좋습니다.

def test_division():
    result = 10 / 2
    assert result == 5

위의 테스트는 실패할 것입니다. 이후 작성된 코드는 다음과 같습니다.

def test_division():
    result = 10 / 2
    assert result == 5.0

결론

pytest를 사용하여 가독성 높은 테스트 코드를 작성할 수 있습니다. 테스트 함수 네이밍, 설명적인 어서션 메시지, 픽스쳐 사용, 매개변수화된 테스트, 실패한 테스트로부터 성공하는 테스트 작성 등을 활용하여 테스트 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.