假设我们正在为多块板创建一个gpio引脚接口。例如:
if board == "raspberrypi":
import RPi.GPIO as gpio
elif board == "bananapi":
import BPi.GPIO as gpio
gpio.setmode(gpio.BCM)
class Pin:
def __init__(self, pinNo):
self.pin = pinNo
def set(self):
gpio.output(self.pin, 1)
这种方法看起来非常简单明了。但是,我不确定如何对它进行单元测试。但是我见过人们这样做。当具有不同于RPi.GPIO的方法的GPIO模块进入时会发生什么?
另一种方法是创建GPIO接口,并具有一个适配器,以确保GPIO模块适合该接口。
class GPIOInterface:
__metaclass__ = ABCMeta
@abstractmethod
def set(self, pin: int):
pass
import RPi.GPIO
class GPIORaspberryAdapter(GPIOInterface):
def __init__(self):
RPi.GPIO.setmode(RPi.GPIO.BCM)
def set(self, pin: int):
RPi.GPIO.output(pin, 1)
然后您只需将其注入Pin类中即可:
class Pin:
def __init__(self, pinNo: int, gpio:GPIOInterface):
self.pin = pinNo
self.gpio = gpio
def set(self):
self.gpio.set(self.pin)
哪种方法更好,为什么?