如何嘲笑零售物价指数在python中

2024-06-01 09:13:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python代码中模拟RPi.GPIO来做一些单元测试。在

我的问题是,RPi.GPIO的导入在不在实际的Raspberry Pi上运行的单元测试中调用时失败。在

例如

测试.py

import iohandler
...
...

iohandler.py

^{pr2}$

这里的问题是,要运行测试,它必须导入iohandler,而后者又必须导入RPi.GPIO。这将失败,因为RPi.GPIO未安装在将运行测试的计算机上。在

我试图在这个网站上看到另一个答案后,尝试欺骗这些模块,如下所示:

测试.py

import sys
import gpiomock # this is a file on the file system
sys.modules["RPi.GPIO"] = gpiomock.GPIO()

import iohandler # the .py file that contains the actual GPIO import

gpiomock.py

class GPIO():
    ...
    ...

由于sys.modules只是一个字典,我本以为这会起作用,因为我提供了一个查找{}的键,而且我还想用它替换它。但是,我得到以下错误消息。在

ImportError: No module named RPi.GPIO

感觉实际的RPi.GPIO库的嵌套结构导致了这一点不起作用。在

有什么建议可以让我这样做吗?在


Tags: the代码pyimportmodulesgpiosyspi
1条回答
网友
1楼 · 发布于 2024-06-01 09:13:52

通过使用Reddit的这个例子,我将在下面重现:

https://www.reddit.com/r/Python/comments/5eddp5/mock_testing_rpigpio/#ampf=undefined

测试.py

from mock import MagicMock, patch

MockRPi = MagicMock()
modules = {
    "RPi": MockRPi,
    "RPi.GPIO": MockRPi.GPIO,
}
patcher = patch.dict("sys.modules", modules)
patcher.start()

# Then for the actual test

with patch("RPi.GPIO.output") as mock_gpio:

    # Invoke the code to test GPIO
    mock_gpio.assert_called_with(....)

相关问题 更多 >