인프런 커뮤니티 질문&답변

BJ원생님의 프로필 이미지

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

Django Unit Test에서 Async Task 시 Default DB 사용 이슈

작성

·

329

·

수정됨

1

unittest 기반의 Unit Test시 Celery 혹은 ProcessPoolExecutor을 이용하면 해당 Context에서 DB 접근 시, Test DB를 참조 하는 것이 아니라 settings의 Default로 설정해놓은 Exist DB에 접근하는 이슈가 있더군요. 해당하는 경우 어떻게 해야 Test DB로 붙어서 작업할 수 있을까요?

with concurrent.futures.ProcessPoolExecutor() as executor:

답변 1

1

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

Unit test 내에서 Celery나 ProcessPoolExecutor를 수행하는 것은 가장 작은 단위를 테스트하는 유닛테스트 목적에는 맞지 않는 듯 보입니다.

Celery는 별도의 프로세스에서 Task가 수행이 되기에 그럴 듯 하구요.

ProcessPoolExecutor에서는 실행 context가 전달이 안 되나보군요. 아래 포스팅을 참고하여 ProcessPooolExecutor인자로 mp_context=mp.get_context("fork") 를 지정하니, 의도하신 대로 동작하는 듯 보입니다.
https://stackoverflow.com/a/70929561

화이팅입니다. :-)

BJ원생님의 프로필 이미지

작성한 질문수

질문하기