[python] doctest를 사용하여 동적 쿼리 생성을 테스트하는 방법은?

Doctest는 Python의 내장된 테스팅 도구로, 함수나 클래스의 예제와 그 예제의 결과를 문서화하는 것과 동시에 테스트하는 도구입니다. 이를 활용하여 동적 쿼리 생성을 테스트하는 방법을 알아보겠습니다.

1. 동적 쿼리 생성 함수 작성

먼저, 동적 쿼리를 생성하는 함수를 작성해야 합니다. 예를 들어, 다음과 같은 함수를 작성해보겠습니다.

def generate_query(table_name, filters):
    query = f"SELECT * FROM {table_name} WHERE"
    for key, value in filters.items():
        query += f" {key} = '{value}' AND"
    query = query[:-4]  # 마지막 AND 제거
    return query

이 함수는 table_namefilters를 인자로 받아 해당 테이블에서 주어진 필터 조건에 맞는 쿼리를 생성합니다.

2. doctest 작성

이제 doctest를 사용하여 동적 쿼리 생성 함수를 테스트할 수 있습니다. 아래와 같이 함수 예제와 기대되는 결과를 작성합니다.

def generate_query(table_name, filters):
    """
    >>> generate_query("users", {"age": 25, "city": "Seoul"})
    'SELECT * FROM users WHERE age = '25' AND city = 'Seoul''
    
    >>> generate_query("products", {"category": "Electronics", "price": 1000})
    'SELECT * FROM products WHERE category = 'Electronics' AND price = '1000''
    """
    query = f"SELECT * FROM {table_name} WHERE"
    for key, value in filters.items():
        query += f" {key} = '{value}' AND"
    query = query[:-4]  # 마지막 AND 제거
    return query

이제 함수 예제와 기대되는 결과를 작성하고, >>> 부분에서 함수를 호출해서 결과를 올바르게 반환하는지 확인합니다.

3. 테스트 실행

작성한 doctest를 실행해보겠습니다. doctest 모듈을 이용하여 테스트할 수 있습니다.

import doctest

if __name__ == "__main__":
    doctest.testmod()

위와 같이 작성하고 실행하면, doctest가 실행되어 함수의 예제와 결과를 비교하고 테스트 결과를 출력합니다. 예상되는 결과와 예제 결과가 일치하는지 확인하여 동적 쿼리 생성 함수를 테스트할 수 있습니다.

4. 동적 쿼리 생성 함수에 대한 더 많은 테스트

더 많은 예제와 결과를 작성하여 함수의 모든 시나리오를 테스트할 수 있습니다. doctest를 사용하면 테스트와 문서화를 같이 할 수 있으므로 코드를 이해하는 데 도움이 됩니다.

참고 자료