Pytest 模拟函数花费的时间太长 运行

Pytest mocked function takes too long to run

我正在学习在编写单元测试时使用模拟。但是如果我不嘲笑他们,我的测试总是会花费时间。考虑这个示例函数:

application.py

from time import sleep
    
def is_windows():
    # fake slow operation
    sleep(5)
    return True


def get_operating_system():
    return 'Windows' if is_windows() else 'Linux'

application_test.py

from application import get_operating_system


# 'mocker' fixture provided by pytest-mock
def test_get_operating_system(mocker):
    # Mock the slow function to return True
    mocker.patch('application.is_windows', return_value=True)
    assert get_operating_system() == 'Windows'

出于某种原因,此测试总是需要超过 5 秒才能完成 运行。如果我从 is_windows() 中删除 sleep(5),那么测试 运行 会在一秒钟内完成,所以看起来该函数根本没有被模拟!我在这里做错了什么吗?任何帮助表示赞赏。谢谢。

编辑:我运行正在PyCharm进行我的测试。

如果你想在其中模拟一些东西,你需要导入 application

import application

def test_get_operating_system(mocker):
    # Mock the slow function to return True
    mocker.patch('application.is_windows', return_value=True)
    assert application.get_operating_system() == 'Windows'

否则,您没有使用补丁。


编辑:实际上,也许我对此很着迷。您的代码按预期模拟了它。我的机器上有 运行 它并且工作正常。

产出

没有补丁:

1 passed in 5.03s

mocker.patch("application.is_windows", return_value=True):

1 passed in 0.02s

mocker.patch("application.is_windows", return_value=False):

1 failed in 0.10s