[python] 단위 테스트가 메서드가 sys.exit ()를 호출한다고 주장 할 수 있습니까?

가끔 호출하는 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)

 

sys.exit 문서 :

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")


답변