首页 > 解决方案 > 是否可以在测试期间强制某些函数使用不同的类?

问题描述

我上课的方法很少。比方说A

文件a.py

class A:
    def foo():
        ...

    def bar():
        ...

在正常运行时(不是测试)我在不同的模块中使用它,就像那样。

文件函数.py

from a import A

def sample_function():
    a_instance = A()
    result = a_instance.foo()
    return result

但是在测试期间,我想用不同的类替换它,比如说 MockA。

文件mock_a.py

class MockA:
    # same methods name, but with different implementation
    def foo():
        ...

    def bar():
        ...

现在我想用一些功能测试模块

测试

from functions import sample_function

def test_sample_function():
    assert sample_function() == expected_output

问题是:

我可以以某种方式“全局”设置别名A = MockA(或以其他方式执行此操作),以便在测试期间sample_function使用来自MockA

标签: pythonmockingpytest

解决方案


这正是unittest.mock.patch 的用途

你怎么用:

测试

from unittest.mock import patch

from mock_a import MockA
from functions import sample_function

@patch('functions.A', new_callable=MockA)
def test_sample_function(mocked_A):
    assert sample_function() == expected_output


推荐阅读