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