클래스내에 있는 함수를 테스트하기로 했다. 이때 고민된 것은 테스트 함수를 실행할 때마다 클래스 인스턴스를 만드는 것이었다.
테스트 하려는 클래스는 생성자될 때 파싱해야 할 노드를 인자로 받는다. 그러면 매 테스트마다 다른 노드를 인자로 클래스를 만들어야 했다
이때 `fixture`를 사용하면 중복 코드를 줄이고 원하는 객체를 제공할 수 있다. 'pytest.fixture' 데코레이터를 작성하면 매 테스트 함수 호출 때마다 데코레이터를 붙인 함수를 실행한다. 이때 DB와 같은 클래스를 정의하거나 사전 준비 코드를 작성하면 테스트 함수마다 작성해야하는 코드 중복을 줄일 수 있다.
@pytest.fixture
def call_parser(elem_manager):
# CallParser 인스턴스를 생성하는 함수를 반환
def _create_parser(node):
return CallParser(node, elem_manager)
return _create_parser
해당 데코레이레이터를 붙은 함수를 호출하는 방법은 테스트하려는 함수의 인자로 넣어주는 것이다. 테스트 함수인 test_get_func_name에서 call_parser를 인자로 받으면, pytest는 call_parser fixture를 호출하여 CallParser 인스턴스를 생성하는 함수를 반환한다. 이를 통해 테스트 함수내에서 call_parser를 호출하여 필요한 CallPaser 인스턴스를 생성할 수 있다.
def test_get_func_name(call_parser, node, expect):
"""
ast.Call 노드가 주어졌을 때 함수 아이디를 제대로 가져오는지 테스트
:param node: ast.Call 노드
:param expect: 예상되는 함수 아이디
:return: None
"""
parser = call_parser(node)
result = parser._CallParser__get_func_name()
assert result == expect
이렇게 fixture를 사용하면, 각 테스트 케이스마다 새로운 CallParser 인스턴스를 생성할 수 있으므로, 테스트 간의 상호작용을 방지하고 각 테스트의 독립성을 보장할 수 있다.
'Soma' 카테고리의 다른 글
| ECR를 사용해서 EC2에 Spring server 배포하기 (0) | 2024.12.23 |
|---|---|
| EC2 생성과 연결 (0) | 2024.12.23 |
| #1 별찍기 시각화 시도 (0) | 2024.05.18 |
| 2024년 소프트웨어 마에스트로 15기 합격 후기 (8) | 2024.03.30 |
| 2024년 소프트웨어 마에스트로 15기 면접 후기 (0) | 2024.03.16 |