TDD - Pytest Assertion Error 핸들링

정태경·2022년 2월 2일
0

TDD

목록 보기
4/10
post-thumbnail

Assertion Error 메시지 추가하기

pytest는 테스트 실패 시 아래와 같이 테스트 실패 사유를 알려준다. 간단한 테스트 코드는 테스트 실패 사유를 쉽게 찾을 수 있지만 테스트 코드가 복잡해지거나 테스트 수가 많아진다면 테스트 실패 사유를 확인하는데 많은 시간이 소요될 것이다.

만약 테스트 실패 사유를 직관적으로 출력할 수 있다면 테스트 통과 실패 이유를 확인하는데 소요되는 시간을 단축할 수 있을 텐데 pytest는 Assertion Error 메시지를 변경할 수 있는 기능을 제공한다.

예제 코드

def test_addition(calc):
    assert calc.addtion(1, 2) == 4, 'Assertion 실패 시 노출할 메시지'

실행 결과

아래와 같이 추가한 Assertion Error 메시지가 결과에 포함되어 노출되는 것을 볼 수 있다.

Assertion Error 메시지 변경하기

Assertion Error 메시지 추가를 위해서는 conftest.py파일과 pytest_assertrepr_compare 메서드를 활용한다.

conftest.pyPytest에서 공통으로 사용되는 Fixture / Plugin / Module을 모아두는 파일이다. 테스트 코드가 실행될 때 공통적으로 호출되어야 하는 Hook들도 이 파일에서 관리한다.

예제를 보여주기 위해 test_calc_2.py파일에 calc.addition를 검증하는 테스트 코드를 하나 생성해놓았다. calc.addition는 인자 2개를 받아 더한 값을 리턴해주는 단순 덧셈 계산기 코드이다.

calc.addition 함수의 인자로 2, 4를 넘겨주었으니 리턴되는 값은 6(2+4)일 텐데 비교 값은 4이므로 Aseertion Error가 발생될 것이다.

# test_calc_2.py 
def test_addition(calc):
    assert calc.addition(2, 4) == 4 

그리고 test_calc_2.py와 같은 경로에 conftest.py 파일을 생성하고 다음과 같이 코드를 작성해두었다.

# conftest.py
def pytest_assertrepr_compare(left, right, op):
    print("Assertion 왼쪽 값은 {0}, 오른쪽 값은 {1}, 비교 값은 {2}".format(left,right, op))

테스트 코드를 실행해 보면 다음과 같이 메시지가 추가된 것을 볼 수 있다.

이처럼 동작하는 이유는 pytest_assertrepr_compare(left, right, op) 메서드의 left 인자에는 calc.addition(2, 4)이 전달되고, right 인자에는 4가 전달되며, op 인자에는 '=='가 전달되어 에러 메시지가 출력되게 된다.

profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글