如何在 pytest Monkeypatch 中模拟函数?

问题描述 投票:0回答:1

我正在尝试模拟一个简单的函数,但我收到一个 AttributeError 并且不知道如何修复它。

def my_function():
    return "original"

def mock_my_function():
    return "mocked"

def test_my_function(monkeypatch):
    monkeypatch.setattr(__name__, 'my_function', mock_my_function)
    assert my_function() == "mocked"

我应该在 __name__ 的位置放置什么才能使其正常工作?

python pytest monkeypatching
1个回答
0
投票

解决方案是将要测试的函数放在不同的文件中,以便它可以充当模块。

包含要测试的函数的文件(名为original_code.py);

def my_function():
    return "original"

包含测试的文件(名为 test_set.py):

import pytest
import original_code

def test_my_function(monkeypatch):
    
    def mock_my_function():
        return "mocked"
    monkeypatch.setattr(original_code, 'my_function', mock_my_function)
    assert original_code.my_function() == "mocked"

文件结构

|_ original_code.py
|_ test_set.py

这应该模拟名为“my_function”的函数,并在测试中定义“mock_my_function”

© www.soinside.com 2019 - 2024. All rights reserved.