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

Python中如何对ToggleButton交互功能编写断言测试?

如何为ToggleButton的显示/隐藏功能编写断言测试

首先明确你的代码基于ipywidgets,测试核心是模拟ToggleButton的状态变化,验证yes_ans函数是否正确控制out容器内的控件显示与隐藏。下面是具体实现步骤:

1. 整理可测试的代码结构

把需要测试的控件和输出容器定义为可访问变量,方便测试时引用:

import ipywidgets as w
from IPython.display import display, clear_output

# 定义待显示的控件
name = w.Text(description="Name:")
food = w.Dropdown(description="Food:", options=["Pizza", "Burger"])
friends_1 = w.Text(description="Friend 1:")
friends_2 = w.Text(description="Friend 2:")
send = w.Button(description="Send RSVP")

out = w.Output()
yes = w.ToggleButton(description="I'll be there!")

def yes_ans(y):
    with out:
        if y['new']:  
            display(name, food, friends_1, friends_2, send)
        else:
            out.clear_output()

yes.observe(yes_ans, 'value')

2. 编写断言测试用例

不需要真的手动点击按钮,直接构造observe监听的事件字典(包含new键,对应ToggleButton的value值),调用yes_ans函数即可模拟操作。下面用pytest风格编写测试:

def test_toggle_show_widgets():
    # 模拟ToggleButton被选中(value=True)的事件
    yes_ans({'new': True})
    
    # 提取out容器中已显示的控件描述
    displayed_descriptions = []
    for output in out.outputs:
        displayed_descriptions.append(output['data']['text/plain'])
    
    # 断言所有目标控件都已被显示
    assert any(name.description in desc for desc in displayed_descriptions)
    assert any(food.description in desc for desc in displayed_descriptions)
    assert any(friends_1.description in desc for desc in displayed_descriptions)
    assert any(friends_2.description in desc for desc in displayed_descriptions)
    assert any(send.description in desc for desc in displayed_descriptions)

def test_toggle_hide_widgets():
    # 先触发显示,确保有内容可清空
    yes_ans({'new': True})
    # 模拟ToggleButton取消选中(value=False)的事件
    yes_ans({'new': False})
    
    # 断言out容器已被清空
    assert len(out.outputs) == 0

测试逻辑说明

  • 模拟事件:observe机制本质是当控件属性变化时,传递包含new(新属性值)的字典给回调函数,直接构造这个字典就能触发逻辑,无需真实交互。
  • 验证显示:out.outputs存储了所有通过display输出的内容,通过检查控件的描述文本是否存在,确认控件已被正确显示。
  • 验证隐藏:触发隐藏逻辑后,检查out.outputs的长度是否为0,确认内容已被清空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:01:00