programing

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

goodsources 2023. 7. 25. 20:55
반응형

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

가끔 호출하는 Python 2.7 메소드가 있습니다.

sys.exit(1)

올바른 조건이 충족되면 이 코드 라인이 호출되는지 확인하는 단위 테스트가 가능합니까?

네.sys.exit인상SystemExit다음을 통해 확인할 수 있습니다.

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예외...외부 레벨에서 출구 시도를 차단할 수 있습니다.

여기 완벽한 작동 예가 있습니다.파벨의 훌륭한 답변에도 불구하고 제가 이 문제를 해결하는 데 시간이 좀 걸렸기 때문에 도움이 되기를 바라며 여기에 포함합니다.

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 Unit Testing 문서 검색에서 귀하의 질문에 대한 답을 찾았습니다.예제를 사용하여 단위 테스트는 다음과 같습니다.

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

언급URL : https://stackoverflow.com/questions/15672151/is-it-possible-for-a-unit-test-to-assert-that-a-method-calls-sys-exit

반응형