[英]How to mock RPi.GPIO in python
我试图在 python 代码中模拟RPi.GPIO
来做一些单元测试。
我RPi.GPIO
的问题是,当在我的单元测试中调用时,我的RPi.GPIO
导入失败,而这些测试并未在实际的 Raspberry Pi 上运行。
例如
测试.py
import iohandler
...
...
iohandler.py
import RPi.GPIO
def function_to_test():
pass
这里的问题是,要运行测试,它必须导入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
只是一个字典,我认为这会起作用,因为我提供了一个用于查找RPi.GPIO
的键以及我想用什么替换它。 但是我收到以下错误消息。
ImportError: No module named RPi.GPIO
感觉就像实际RPi.GPIO
库的嵌套结构导致这不起作用。
关于如何使这项工作有任何建议?
通过使用来自 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(....)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.