关于python:如何在pytest中引发异常?

How to raise an exception in pytest?

我在views.py中编写了一个代码

1
2
3
4
5
def fun():
    try:
         --Do some operation--
    except OSError:
         --Do something else--

我编写了一个测试用例来涵盖代码的总功能。 为了测试"除外"部分,我编写了以下代码,它将引发"OSError",

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

但是,我收到了这个错误

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

如何引用"OSError"来覆盖测试用例中的除外部分。
顺便说一句,我使用的是django-framework


最好的办法可能就是模拟方法来抛出你需要的异常,而不是经历实际创建OSError将被抛出的条件的所有麻烦。 玩具示例:

1
2
3
4
5
6
7
8
9
10
11
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()所在的模块中模拟调用。好的地方开始阅读模拟:

  • 文档快速指南
  • 补丁文档(特别注意'在哪里补丁'部分)
  • 有关堆栈溢出的深入示例。 由于它比我的概念验证示例更复杂,它可能类似于您想要实现的目标。