我正在尝试添加一些单元测试,以确保抛出了正确的错误(我的函数抛出KeyError
或RuntimeError
)。
我已经尝试过assert func(bad_param) == KeyError
和assert isinstance(func(bad_param), KeyError)
,但都不正确,我应该如何为此编写单元测试/当传递错误时断言该函数的正确方法是什么?参数,将引发正确的Exception?
编辑:我不使用unittest
库,我只是在问Python std lib(https://docs.python.org/3/reference/simple_stmts.html)附带的assert
函数
答案 0 :(得分:3)
您可以使用pytest.raises上下文管理器:
with pytest.raises(ExpectedErrorType):
unit_under_test()
有关更多详细信息,请参见pytest docs。
我在文档中没有找到可以说明如何期望多种异常类型的示例,但是您可以通过检查异常信息对象来手动完成此操作:
with pytest.raises(Exception) as exc_info:
unit_under_test()
assert issubclass(exc_info.type, (KeyError, RuntimeError))
# alternative more strict assertion
assert exc_info.type in (KeyError, RuntimeError)
答案 1 :(得分:1)
我已经做过类似的事情,并且我使用了try ... except
语句:
try:
# Code to test
except KeyError:
assert True
assert False
这是一个最小的工作示例(用于类似 pytest 的单一测试):
def fun():
raise KeyError
def test():
try:
fun()
except KeyError:
assert True
return
assert False
答案 2 :(得分:0)
您可以使用try except
来捕获类似
def foo():
raise ValueError
rightExceptionRaised = False
try:
foo()
except ValueError:
rightExceptionRaised = True
except:
pass
assert rightExceptionRaised
答案 3 :(得分:0)
编辑:请参阅@plamut撰写的帖子
我找到了一个答案,该答案可能与pytest
打算进行检查的方式更加一致!
def foo():
raise KeyError
def test_foo_error():
with pytest.raise(KeyError)
foo()