가끔 호출하는 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
예외 를 발생시킴으로써 구현됩니다 . 외부 수준에서 출구 시도를 가로 챌 수 있습니다.
sys.exit(1)
(예 :라고하는 것과는 반대로 sys.exit(0)
) 실제로 1이라고 주장해야 한다는 점을 제외하고는 다음 과 같이 code
할 수 있습니다. assertRaisesRegexp(SystemExit, '1')
?
unittest
예외와 호출 가능한 조건 자를 전달 하여 예외 또는 인수에서 실행할 수 있는 메서드가 있다고 확신했습니다 .하지만 그렇지 않은 것 같습니다. 내가 생각하고있는 다른 테스트 모듈이 있습니까?
self.assertRaisesRegex( SystemExit, '^2$', testMethod )
. 코드가 적고 충분히 읽을 수 있습니다.
self.assertRaisesRegexp
여기에 완전한 작동 예가 있습니다. 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)
함수를 테스트하는 데 필요한 모든 인수를 포함해야합니다.