检查是否使用 pytest 引发了期望

Mih*_*hai 4 python testing pytest

作为异常测试处理的新手,我想知道如何检查是否提出了断言。

一个.py

class SomeError(Exception):
    pass

class SomeClass(object):
    def __init__(self):
        ...
        raise SomeError
        ...
Run Code Online (Sandbox Code Playgroud)

test_a.py

from a.a import SomeClass

def test_some_exception_raised():
    ?
Run Code Online (Sandbox Code Playgroud)

应该有什么断言来检查是否SomeError被提出?我正在使用 pytest。

Aks*_*ngh 7

为了编写关于引发异常的断言,您可以pytest.raises像这样使用上下文管理器:

一个.py

class SomeError(Exception):
    pass

class SomeClass(object):
    def __init__(self):
        ...
        raise SomeError("some error message")
        ...
Run Code Online (Sandbox Code Playgroud)

test_a.py

from .a import SomeClass, SomeError
import pytest

def test_some_exception_raised():
    with pytest.raises(SomeError) as excinfo:   
        obj = SomeClass()  
    
    assert 'some error message' in str(excinfo.value)
Run Code Online (Sandbox Code Playgroud)

有关异常断言的更多信息,请参见此处

  • “assert”不应该在“with”块之外吗? (2认同)