Python中如何对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
相关产品推荐
相关产品推荐

