我有这个功能
def get_info_linux():
import dbus
session_bus = dbus.SessionBus()
spotify_bus = session_bus.get_object("org.mpris.MediaPlayer2.spotify",
"/org/mpris/MediaPlayer2")
spotify_properties = dbus.Interface(spotify_bus,
"org.freedesktop.DBus.Properties")
metadata = spotify_properties.Get("org.mpris.MediaPlayer2.Player", "Metadata")
track = str(metadata['xesam:title'])
artist = str(metadata['xesam:artist'][0])
return artist, track
这将使用dbus从spotify获取信息。如何为它编写单元测试?你知道吗
直接为依赖于网络的东西编写单元测试不是一个好主意,也不能确保测试始终具有相同的行为。你知道吗
但是你可以通过添加一个抽象元素来避免这个问题。这个接口可以由代码中使用的当前方法实现,也可以实现测试中使用的存根。你喜欢什么就给什么。你知道吗
测试这种D-Bus服务客户机最常见的方法是针对一个假的D-Bus会话总线运行它,该会话总线上运行着Spotify服务的模拟实现(由测试代码控制)。你知道吗
您可以使用^{} 创建模拟会话总线,然后使用普通GDBus api在其上公开D-bus对象。创建一个} 返回的地址,然后在D-Bus对象路径
Gio.DBusConnection
连接到^{/org/mpris/MediaPlayer2
上公开一个对象,至少实现org.freedesktop.DBus.Properties
属性,并返回测试代码查询的属性的模拟数据。你知道吗被测代码在测试线束下运行时应使用模拟会话总线,因为
GTestDBus
重写DBUS_SESSION_BUS_ADDRESS
环境变量,GIO(默认情况下)使用该变量查找实际会话总线的地址。你知道吗相关问题 更多 >
编程相关推荐