django 如何在pytest中引发异常?

ki1q1bka  于 2023-04-13  发布在  Go
关注(0)|答案(2)|浏览(100)

我在www.example.com上写了一段代码views.py

def fun():
    try:
         --Do some operation--
    except OSError:
         --Do something else--

我写了一个测试用例来覆盖代码的全部功能。为了测试“except”部分,我写了下面的代码,它将引发“OSError”,

with pytest.raises(OSError):
    response = client.post(reverse('my_views_funurl'), follow=True)

但是,我得到这个错误

response = client.post(reverse('my_views_funurl'), follow=True)
E           Failed: DID NOT RAISE

如何引发“OSError”来覆盖测试用例中的except部分。顺便说一下,我正在使用django-framework

iovurdzv

iovurdzv1#

最好的方法可能是模拟方法来抛出你需要的异常,而不是经历所有的麻烦,实际上创建条件,在其中抛出OSError。一个玩具例子:

from unittest.mock import Mock

def something():
    ...

something = Mock(side_effect=OSError('Your error text'))

>>> something()
>>> Traceback (most recent call first):
>>> ...
>>> OSError: Your error text

现在,正如我所说的,这只是一个玩具的例子,所以对于您自己的项目与不同的结构和所有您将最有可能需要一点不同的设置(根据您提供的信息,很难知道它的确切外观)。例如,如果您期望某个调用将在fun()中抛出OSError异常,然后你需要在fun()所在的模块中模拟调用。开始阅读模拟的好地方:
1.文档快速指南
1.修补程序文档(特别注意"修补位置“部分)
1.由于它比我的概念验证示例要复杂一些,因此它可能与您尝试实现的内容类似。

e4yzc0pl

e4yzc0pl2#

使用“pytest”的正确方法是将“side_effect”参数提供给patch(),并附带预期的Exception。示例:

def your_test_function(mocker):
    mocker.patch(
        "function.being.mocked",
        side_effect=OSError()
    )
    with pytest.raises(OSError):
        function.being.mocked()

相关问题