[python] Peewee를 사용한 테스트 주도 개발

테스트 주도 개발(Test-Driven Development, TDD)은 소프트웨어 개발 방법론 중 하나로, 개발자가 먼저 테스트 코드를 작성하고, 그 후에 그에 맞는 실제 코드를 작성하는 방식입니다. 이를 통해 코드 품질을 높이고 유지보수의 용이성을 높일 수 있습니다.

Peewee는 Python으로 작성된 간단하고 가벼운 ORM(Object-Relational Mapping) 도구입니다. 테스트 주도 개발에 Peewee를 활용하여 데이터베이스와의 상호작용을 테스트할 수 있습니다.

테스트 환경 설정

가상환경을 설정한 후, 필요한 패키지를 설치하세요:

pip install peewee pytest

모델과 테스트 작성

간단한 도서 관리 애플리케이션을 만들어보겠습니다. Book이라는 모델을 정의하고, 해당 모델을 테스트하는 코드를 작성해봅시다. 아래와 같이 작성하세요:

from peewee import *

db = SqliteDatabase(':memory:')

class Book(Model):
    title = CharField()
    author = CharField()

    class Meta:
        database = db

def test_create_book():
    with db.bind_ctx([Book]):
        db.create_tables([Book])
        book = Book.create(title="Harry Potter", author="J.K. Rowling")
        assert book.title == "Harry Potter"
        assert book.author == "J.K. Rowling"

위 코드에서 Book 클래스는 Peewee의 Model을 상속받습니다. titleauthor는 각각 CharField로 정의된 필드입니다. Meta 클래스에서 데이터베이스 연결을 위한 database 설정을 명시하였습니다.

test_create_book 함수에서는 데이터베이스와 테이블을 생성한 후, Book 모델을 통해 새로운 도서를 생성하며, 생성된 도서의 titleauthor를 검증하는 테스트를 작성하였습니다.

테스트 실행

터미널에서 아래와 같이 테스트를 실행하세요:

pytest -v

예상대로 실행되면, 결과는 아래와 유사한 형태일 것입니다:

============================= test session starts ==============================
...
collected 1 item

test_book.py::test_create_book PASSED                                     [100%]

============================== 1 passed in 0.15s ===============================

결론

Peewee를 사용하여 테스트 주도 개발 방식으로 코드를 작성하면 데이터베이스와 상호작용하는 코드의 품질과 신뢰성을 높일 수 있습니다. 테스트 케이스를 작성함으로써 코드를 더 나은 상태로 유지하기 쉽고, 버그 수정 및 확장을 보다 안전하게 진행할 수 있습니다.

참고: Peewee 공식 문서