我正在写一个测试运行器。我有一个可以捕获和存储异常的对象,稍后将作为测试失败报告的一部分将其格式化为字符串。我正在尝试对格式化异常的过程进行单元测试。
在我的测试设置中,我不想实际抛出异常让我的对象捕获,主要是因为这意味着回溯将无法预测。(如果文件更改长度,则回溯中的行号将更改。)
如何将假回溯附加到异常,以便我可以断言其格式化方式?这甚至可能吗?我正在使用 Python 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
""")