You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测试返回外部信息的代码?以getPrimaryMonitorSize函数为例

解决思路:抽象依赖 + 模拟(mock)测试

第一步:把系统交互逻辑抽成独立层

别让getPrimaryMonitorSize()直接调用OS API,而是把这部分逻辑拆成一个单独的接口/类,比如叫DisplayAdapter。生产环境用真实的系统调用实现,测试时用模拟的实现。

举个伪代码例子:

# 定义抽象接口
class DisplayAdapter:
    def get_primary_resolution(self):
        pass

# 生产环境的真实实现
class SystemDisplayAdapter(DisplayAdapter):
    def get_primary_resolution(self):
        # 这里写调用系统API的代码,比如Windows用ctypes、Linux用Xlib
        # 实际返回系统真实的分辨率
        return (1920, 1080)

# 你的工具模块
class DisplayTool:
    def __init__(self, adapter: DisplayAdapter = None):
        # 依赖注入,默认用系统实现
        self.adapter = adapter or SystemDisplayAdapter()

    def getPrimaryMonitorSize(self):
        return self.adapter.get_primary_resolution()

第二步:用模拟对象写测试

测试时不用碰真实的系统API,直接造一个模拟的DisplayAdapter,预设好返回值,然后验证getPrimaryMonitorSize()能不能正确拿到这个值。

比如用Python的unittest.mock:

from unittest.mock import Mock

def test_get_primary_monitor_size():
    # 造一个模拟适配器,指定返回值
    mock_adapter = Mock(spec=DisplayAdapter)
    mock_adapter.get_primary_resolution.return_value = (2560, 1440)
    
    # 把模拟适配器传给工具类
    tool = DisplayTool(mock_adapter)
    # 验证结果是否符合预期
    assert tool.getPrimaryMonitorSize() == (2560, 1440)
    # 还能检查适配器方法有没有被正确调用
    mock_adapter.get_primary_resolution.assert_called_once()

为什么这个方案靠谱?

  • 摆脱系统依赖:测试不管在什么机器上跑,模拟的返回值都是固定的,不会因为换了显示器就失败。
  • 没有代码冗余:测试不用重复写系统API调用的逻辑,只需要验证你的工具函数是否正确转发/处理数据(如果以后加了分辨率转换之类的逻辑,这个优势更明显)。
  • 贴合TDD思路:你可以先写测试,先定义DisplayAdapter的接口,再实现工具类,最后补全真实的系统适配代码。

内容的提问来源于stack exchange,提问作者wigi426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:37:28