테스트 러너를 쓰고 있습니다. 나는 예외를 포착하고 저장할 수있는 객체를 가지고 있으며,이 객체는 나중에 테스트 실패 보고서의 일부로 문자열로 포맷됩니다. 예외를 형식화하는 프로 시저를 단위 테스트하려고합니다.파이썬에서 흔적 추적하기
내 테스트 설정에서 실제로는이 내 개체를 잡을 예외를 throw하고 싶지 않습니다. 이는 주로 추적 표시를 예측할 수 없기 때문입니다. (파일의 길이가 변하면 트레이스 백에있는 줄 번호가 바뀔 것입니다.)
가짜 추적을 예외에 첨부하면 포맷 방법에 대한 주장을 할 수 있습니다. 이것은 가능한가? 파이썬 3.3을 사용하고 있습니다.
간단한 예 :
class ExceptionCatcher(object):
def __init__(self, function_to_try):
self.f = function_to_try
self.exception = None
def try_run(self):
try:
self.f()
except Exception as e:
self.exception = e
def format_exception_catcher(catcher):
pass
# No implementation yet - I'm doing TDD.
# This'll probably use the 'traceback' module to stringify catcher.exception
class TestFormattingExceptions(unittest.TestCase):
def test_formatting(self):
catcher = ExceptionCatcher(None)
catcher.exception = ValueError("Oh no")
# do something to catcher.exception so that it has a traceback?
output_str = format_exception_catcher(catcher)
self.assertEquals(output_str,
"""Traceback (most recent call last):
File "nonexistent_file.py", line 100, in nonexistent_function
raise ValueError("Oh no")
ValueError: Oh no
""")
나는 C/Level에 동의하지만, 필요하다면 파일 라인을 도울 수있다. 'linecache.updatecache (파일 이름, fake_module_with_a ___ 로더 ___ 속성)'이 올바른 방향입니다. – User
@User Awesome! 나는 그것을 들여다 볼 것이다. –
그 점을 들여다 보았습니다. 새로운 솔루션을 갖고 있다면 공유하십시오! :) – User