Python
[TEST] 2.테스트 코드 작성하기
foxlee
2021. 10. 24. 23:57
이전 글 2021.10.23 - [개발 고민들] - [TEST] 1. 테스트를 시작하게 된 계기
코드

# tests/conftest.py
@pytest.fixture
def client():
app = create_app()
app.config["TESTING"] = True
app.testing = True
with app.test_client() as client:
app.config["SQLALCHEMY_DATABASE_URI"] = "db url"
with app.app_context():
db.create_all()
yield client
db.session.rollback()
db.session.close()
# db.drop_all() # 모든 테스트에서 테이블 삭제로 인한 속도가 느려짐
# 테스트 속도 향상을 위해 모든 테스트가 끝난 후에 db 테이블 삭제
def pytest_sessionfinish(session, exitstatus):
"""whole test run finishes."""
app = create_app()
app.config["SQLALCHEMY_DATABASE_URI"] = "db url"
with app.app_context():
db.drop_all()
# tests/test_action.py 의 일부분
def test_get_action_by_id(client, api_helpers):
# arrange - create action
data = {"name": "test-action-by-id"}
url = "/api/actions/"
response = client.post(url, data=json.dumps(data), headers=api_helpers.headers)
action_id = api_helpers.convert_response_to_dict(response)["result"]
# act
get_response = client.get(f"/api/actions/{action_id}")
# assert
assert get_response.status_code == 200
테스트 코드을 작성하며...
- 먼저 테스트 코드 작성(다양한 케이스 생각하고 개별 테스트 함수 생성)
- 해당 테스트를 통과하기 위한 기능 추가 또는 수정
- 해당 기능 리팩토링
- 위 순서를 지키기 위해 노력했으나 보통 1,2이 섞이고, 2,3이 섞이면서 개발을 진행했던거 같다.
- 1번을 진행하며 해당 기능에 정확한 역할에 대해 생각해 보고 다양한 테스트 케이스 생각하기
- 2번을 진행하며 일부/전체 테스트 진행하여 다른 기능에 영향을 주는 지 확인
- 3번 리팩토링(가독성, 네이밍, 의존성 등 고려)