Pytest 그리고 Unittest
내가 처음 파이썬 개발을 시작할 때 단위 테스트 프레임워크로 unittest를 주로 사용했었다. 그런데 Github이나 Stackoverflow를 돌아다니다 보면 unittest 보다 pytest를 추천하는 개발자들이 압도적으로 많았다. 이유는 pytest가 unittest에 비해 사용법이 더 편리하고, 파이썬 스타일 가이드(PEP8)를 따라 간결한 코드 작성에 도움이 되며 fixture 활용, custom assert 활용 등의 장점이 있다고 한다.
Pytest vs Unittest
아래처럼 samplecode.py
파일 안에 Calc
Class가 있다고 가정해보자.
# samplecode.py
class Calc:
def __init__(self):
pass
def addtion(self, a, b):
return a + b
def subtraction(self, a, b):
return a - b
def division(self, a, b):
return a/b
Unittest
위 코드를 테스트 하기 위해서 작성한 Unittest 테스트코드는 다음과 같다.
import unittest
from samplecode import Calc
class CalcTest(unittest.TestCase):
def setUp(self):
self.a = Calc()
def test_addition(self):
self.assertEqual(self.a.addtion(1,2), 3)
def test_subtraction(self):
self.assertEqual(self.a.subtraction(2,1), 1)
def test_division(self):
self.assertEqual(self.a.division(4,2), 2)
간단한 테스트 코드라 가독성이 좋아 보이고 단점이 없다고 생각할 수 있지만, Unittest로 작성된 테스트 코드는 다음과 같이 복잡하게 동작한다.
- unittest 프레임워크에서 TestCase를 임포트 한다.
- TestCase를 상속받는 CalcTest 클래스를 생성한다.
- 필요한 테스트케이스를 CalcTest 안에 메서드로 만든다.
- 검증을 위해
unittest.TestCase
에서self.assert*
메서드를 사용한다.
Pytest
그럼 이번에는 Pytest로 테스트 코드를 작성해보자.
import pytest
from samplecode import Calc
@pytest.fixture
def calc():
a = Calc()
return a
def test_addition(calc):
assert calc.addtion(1,2) == 3
def test_subtraction(calc):
assert calc.subtraction(2, 1) == 1
def test_division(calc):
assert calc.division(4, 2) == 2
Pytest를 사용함으로써 다른 모듈을 임포트 하거나 클래스를 사용하지 않아도 된다. 또한 self.assert*
메서드처럼 무언가를 배우거나 기억하지 않아도 된다.
이 밖에도 Pytest는 장점들이 많이 있다. 내장된 Unittest와도 함께 동작하고 간단한 문법으로 쉽게 시작할 수 있다. 또한 Fixture를 통해 코드의 중복을 줄이고 Fixture들을 하나의 파일에 모아 모든 테스트 코드에서 공유하여 활용하는 것도 가능하다.
앞으로 Pytest에 대해 조금 더 정리해 볼 예정이다.
Author And Source
이 문제에 관하여(Pytest 그리고 Unittest), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tkjung/TDD-Pytest-그리고-Unittest저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)