首页 > 解决方案 > 类实例化和方法的 pytest 模拟异常

问题描述

我有以下夹具。

import mod1
import pytest
from unittest import mock

@pytest.fixture()
def patched_mocked():
    with mock.patch('mod1.f1') as mocked_function:
        x_mock = mock.Mock(mod1.X)
        x_mock.producer = mock.Mock() # need to mock exception
        x_mock.producer.func2 = lambda: None # need to mock exception
        mocked_function.return_value = x_mock
        yield x_mock

def test_1(patched_mocked):

这是mod1.py

class Y:
    def func2(self):
        raise Exception("Shouldn't be called")

class X:
    def __init__(self):
        self.producer = Y()

    def func1(self):
        self.producer.func2()

我有几个测试用例使用上面的夹具。Y.func2()现在我需要分别为和Y()引发异常编写两个测试用例。如何模拟异常?


我尝试了以下但它不工作。

@pytest.fixture()
def patched_mocked_exception():
    with mock.patch('mod1.f1') as mocked_function:
        x_mock = mock.Mock(mod1.X)
        x_mock.producer = mock.Mock()
        with mock.patch('mod1.f1.Y.func2', side_effect=Exception('mocked ex'):
            x_mock.producer.func2 = lambda: None
        mocked_function.return_value = x_mock
        yield x_mock

标签: pythonpytest

解决方案


推荐阅读