【问题标题】:python mock import in imported module导入模块中的python模拟导入
【发布时间】:2020-04-23 13:51:16
【问题描述】:

我正在尝试使用 unittest.mock 来模拟被测模块中的导入。

我看到的是,尽管我的模块调用 sleep 5 次,但我在测试函数中与之交互的模拟对象并不是我所期望的。

我假设我没有正确地做某事。我确实阅读了文档,但我确定我没有正确执行此操作。

"""example.py"""

import time


def mycode():
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)
"""test_example.py"""

import example

from unittest.mock import patch


@patch("example.time.sleep")
def test_example(mock_time):
    example.mycode()
    assert mock_time.call_count == 5

【问题讨论】:

  • 看起来像是错字。你需要assert mock_time.sleep.call_count == 5(你使用get而不是sleep)。
  • 不错但同样的错误Expected :5 Actual :0
  • 我通过重构和模拟 sleep 方法更改了问题以修复错误。我可以模拟整个时间对象吗?
  • 是的 - 我刚刚用你的第一个版本(有更正)试了一下,对我来说效果很好。
  • 用@patch("example.time") 试过了吗?不是时间。睡觉?这似乎对我不起作用,也不会模拟时间。如果你为你工作,你能告诉我你的跑步情况吗?

标签: python-3.x python-unittest.mock


【解决方案1】:

这对我有用:

package/time_sleep.py

import time


def do_sleep():
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)
    time.sleep(10)

test_time_sleep.py

from unittest.mock import patch

from package.time_sleep import do_sleep


@patch("package.time_sleep.time")
def test_sleep1(mock_time):
    do_sleep()
    assert mock_time.sleep.call_count == 5


@patch("package.time_sleep.time.sleep")
def test_sleep2(mock_sleep):
    do_sleep()
    assert mock_sleep.call_count == 5

这看起来与您的代码非常相似(除了名称)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2020-06-30
    相关资源
    最近更新 更多