Python 使用pytest断言表达式引发异常的正确方法是什么?

Python 使用pytest断言表达式引发异常的正确方法是什么?,python,pytest,Python,Pytest,我正在尝试添加一些单元测试,以确保抛出正确的错误。我的函数要么抛出KeyError,要么抛出RuntimeError 我已经尝试过assert funcbad_param==KeyError和assert isinstancefuncbad_param,KeyError,但这两个都不正确,我应该如何为此编写单元测试/当传递一个坏参数时,断言此函数将引发正确异常的正确方法是什么 编辑:我没有使用unittest库,我只是询问Python std lib附带的assert函数,您可以使用try-ex

我正在尝试添加一些单元测试,以确保抛出正确的错误。我的函数要么抛出KeyError,要么抛出RuntimeError

我已经尝试过assert funcbad_param==KeyError和assert isinstancefuncbad_param,KeyError,但这两个都不正确,我应该如何为此编写单元测试/当传递一个坏参数时,断言此函数将引发正确异常的正确方法是什么

编辑:我没有使用unittest库,我只是询问Python std lib附带的assert函数,您可以使用try-except捕捉异常,如

def foo: 升值误差 RightExceptionRised=False 尝试: 福 除值错误外: RightExceptionRised=True 除: 通过 assert RightException引发 您可以使用try-except捕捉异常,如

def foo: 升值误差 RightExceptionRised=False 尝试: 福 除值错误外: RightExceptionRised=True 除: 通过 assert RightException引发 您可以使用上下文管理器:

使用pytest.raiseExpectedErrorType: 单元测试 有关更多详细信息,请参阅

我在文档中没有找到任何解释如何期望多种异常类型的示例,但您可以通过检查exception info对象手动执行此操作:

使用pytest.RaiseException作为exc_信息: 单元测试 断言issubclassexc_info.type、KeyError、RuntimeError 另一种更严格的断言 assert exc_info.type in key错误,RuntimeError 您可以使用上下文管理器:

使用pytest.raiseExpectedErrorType: 单元测试 有关更多详细信息,请参阅

我在文档中没有找到任何解释如何期望多种异常类型的示例,但您可以通过检查exception info对象手动执行此操作:

使用pytest.RaiseException作为exc_信息: 单元测试 断言issubclassexc_info.type、KeyError、RuntimeError 另一种更严格的断言 assert exc_info.type in key错误,RuntimeError
我已经做过类似的事情,我曾经尝试过。。。除声明外:

尝试: 要测试的代码 除KeyError外: 断言正确 断言错误 下面是一个类似于单一测试的pytest的最小工作示例:

def fun: 上升键错误 def测试: 尝试: 享乐 除KeyError外: 断言正确 回来 断言错误
我已经做过类似的事情,我曾经尝试过。。。除声明外:

尝试: 要测试的代码 除KeyError外: 断言正确 断言错误 下面是一个类似于单一测试的pytest的最小工作示例:

def fun: 上升键错误 def测试: 尝试: 享乐 除KeyError外: 断言正确 回来 断言错误
编辑:参考@plamut撰写的帖子

我找到了一个答案,这个答案可能更符合pytest检查它的意图

def foo():
    raise KeyError

def test_foo_error():
    with pytest.raise(KeyError)
        foo()

编辑:参考@plamut撰写的帖子

我找到了一个答案,这个答案可能更符合pytest检查它的意图

def foo():
    raise KeyError

def test_foo_error():
    with pytest.raise(KeyError)
        foo()

这回答了你的问题吗@maciek97x抱歉,我应该澄清我没有使用unittest Library重新打开,因为链接的问题不是特定于pytest的。这是否回答了您的问题@maciek97x抱歉,我应该澄清我没有使用unittest Library重新打开,因为链接的问题不是特定于pytest的。