[파이썬] pytest 클린 코드 원칙과 테스트 코드

테스트 코드는 클린 코드를 작성하는 데 있어 매우 중요한 역할을 합니다. 테스트 코드는 소프트웨어의 기능을 검증하고 버그를 예방하기 위해 사용됩니다. pytest는 파이썬에서 테스트 코드를 작성하기 위한 강력하고 인기 있는 프레임워크입니다. 이 블로그 포스트에서는 pytest를 사용하여 클린 코드 원칙을 어떻게 따를 수 있는지 알아보겠습니다.

클린 코드 원칙과 pytest

1. 읽기 쉬운 코드 작성하기

pytest는 기능적으로 테스트 케이스를 작성하기에 간편하고 가독성이 높은 코드를 작성할 수 있도록 도와줍니다. pytest는 함수형 스타일의 테스트 케이스 작성을 지원하며, 부가적인 문법이나 장식적인 코드 없이 직관적이고 명확한 테스트 함수를 작성할 수 있습니다. 이로써 테스트 코드를 작성하면서 클린 코드 원칙 중 하나인 “가독성”을 확보할 수 있습니다.

예제 코드:

def test_calculate_sum():
    assert calculate_sum(2, 2) == 4
    assert calculate_sum(5, 10) == 15

위의 예제 코드에서는 test_calculate_sum이라는 함수를 정의하여 각각의 assert문으로 기능을 테스트하고 있습니다. 간단하고 가독성이 높은 코드로 기능을 검증할 수 있습니다.

2. 테스트 케이스 분리하기

pytest는 모듈화된 테스트 코드를 작성할 수 있도록 도와줍니다. 이를 통해 테스트 케이스를 여러 개의 파일로 분리하고 필요한 테스트 함수들을 모듈 단위로 구성할 수 있습니다. 이렇게하면 코드의 구조를 보다 명확하게 표현할 수 있고, 유지 및 보수가 용이해집니다. 테스트 케이스를 분리함으로써 클린 코드 원칙 중 하나인 “모듈화”를 지킬 수 있습니다.

예제 코드:

프로젝트 구조:

- tests
    - test_calculator.py

test_calculator.py:

def test_addition():
    assert calculate_sum(2, 2) == 4
    assert calculate_sum(5, 10) == 15

def test_subtraction():
    assert calculate_difference(5, 2) == 3
    assert calculate_difference(10, 5) == 5

위의 예제 코드에서는 test_additiontest_subtraction이라는 함수로 각각의 기능을 테스트하고 있습니다. 이렇게 테스트 케이스를 별도의 함수로 분리하면 코드를 보다 구조화할 수 있으며, 테스트 케이스 간의 관계를 명확하게 표현할 수 있습니다.

3. 실패하는 테스트 케이스 작성하기

pytest는 실패하는 테스트 케이스 작성 시 조건부 기능을 지원합니다. 이렇게하면 테스트 케이스를 성공하지 못하는 시나리오에 직면할 수 있고, 버그를 발견하고 개선하는 데 도움이 됩니다. 실패하는 테스트 케이스를 작성함으로써 클린 코드 원칙 중 하나인 “간극 예방”을 준수할 수 있습니다.

예제 코드:

def test_calculate_sum():
    assert calculate_sum(2, 2) == 4
    assert calculate_sum(5, 10) == 15
    assert calculate_sum(1, 1) == 10  # 이 테스트 케이스는 실패해야 함!

위의 예제 코드에서는 마지막 assert문에서 실패하는 테스트 케이스를 작성하였습니다. 이렇게 함으로써 테스트가 실패하고 예상치 못한 동작을 확인할 수 있습니다. 이후 코드를 수정하여 테스트가 성공하도록 만들어 클린한 코드를 작성할 수 있습니다.

결론

pytest는 클린 코드 원칙을 따르는 테스트 코드 작성을 돕는 강력한 도구입니다. 간결하고 읽기 쉬운 코드 작성, 테스트 케이스 분리, 실패하는 테스트 케이스 작성을 통해 클린 코드를 유지할 수 있습니다. pytest를 사용하여 효과적이고 효율적인 테스트 코드를 작성해보세요!