가끔 호출하는 python 2.7 메서드가 있습니다.
sys.exit(1)
올바른 조건이 충족 될 때이 코드 줄이 호출되는지 확인하는 단위 테스트를 만들 수 있습니까?
답변
예. sys.exit
발생 SystemExit
하므로 다음으로 확인할 수 있습니다 assertRaises
.
with self.assertRaises(SystemExit):
your_method()
의 인스턴스 에는 제안 된 종료 상태로 설정된 SystemExit
속성 code
이 있고에서 반환 된 컨텍스트 관리자 assertRaises
에는으로 포착 된 예외 인스턴스가 exception
있으므로 종료 상태를 쉽게 확인할 수 있습니다.
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception.code, 1)
Python을 종료합니다. 이것은
SystemExit
예외 를 발생시킴으로써 구현됩니다 . 외부 수준에서 출구 시도를 가로 챌 수 있습니다.
답변
여기에 완전한 작동 예가 있습니다. Pavel의 훌륭한 답변에도 불구하고 이것을 알아내는 데 시간이 걸렸으므로 도움이 될 것이라는 희망으로 여기에 포함했습니다.
import unittest
from glf.logtype.grinder.mapping_reader import MapReader
INCOMPLETE_MAPPING_FILE="test/data/incomplete.http.mapping"
class TestMapReader(unittest.TestCase):
def test_get_tx_names_incomplete_mapping_file(self):
map_reader = MapReader()
with self.assertRaises(SystemExit) as cm:
tx_names = map_reader.get_tx_names(INCOMPLETE_MAPPING_FILE)
self.assertEqual(cm.exception.code, 1)
답변
“예외 테스트” 에 대한 Python 단위 테스트 문서 검색 에서 질문에 대한 답을 찾았습니다 . 예제를 사용하면 단위 테스트는 다음과 같습니다.
self.assertRaises(SystemExit, your_function, argument 1, argument 2)
함수를 테스트하는 데 필요한 모든 인수를 포함해야합니다.
답변
Pavel의 탁월한 답변에 대한 추가 메모로 테스트중인 기능에서 제공되는 경우 특정 상태를 확인할 수도 있습니다. 예를 들어 your_method()
다음 sys.exit("Error")
이 포함 된 경우 “오류”를 구체적으로 테스트 할 수 있습니다.
with self.assertRaises(SystemExit) as cm:
your_method()
self.assertEqual(cm.exception, "Error")