如何使用dbus为函数编写单元测试以从Spotify获取信息?

2024-04-19 06:40:37 发布

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

我有这个功能

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获取信息。如何为它编写单元测试?你知道吗


Tags: org功能getartistsessiontrackpropertiesspotify
1条回答
网友
1楼 · 发布于 2024-04-19 06:40:37

直接为依赖于网络的东西编写单元测试不是一个好主意,也不能确保测试始终具有相同的行为。你知道吗

但是你可以通过添加一个抽象元素来避免这个问题。这个接口可以由代码中使用的当前方法实现,也可以实现测试中使用的存根。你喜欢什么就给什么。你知道吗

网友
2楼 · 发布于 2024-04-19 06:40:37

测试这种D-Bus服务客户机最常见的方法是针对一个假的D-Bus会话总线运行它,该会话总线上运行着Spotify服务的模拟实现(由测试代码控制)。你知道吗

您可以使用^{}创建模拟会话总线,然后使用普通GDBus api在其上公开D-bus对象。创建一个Gio.DBusConnection连接到^{}返回的地址,然后在D-Bus对象路径/org/mpris/MediaPlayer2上公开一个对象,至少实现org.freedesktop.DBus.Properties属性,并返回测试代码查询的属性的模拟数据。你知道吗

被测代码在测试线束下运行时应使用模拟会话总线,因为GTestDBus重写DBUS_SESSION_BUS_ADDRESS环境变量,GIO(默认情况下)使用该变量查找实际会话总线的地址。你知道吗

相关问题 更多 >