Fyne 系列 11:测试 Fyne 图形界面
cbowen

GUI 程序也可以测试。Fyne 提供了 fyne.io/fyne/v2/test 包,可以模拟点击、输入,并检查控件状态。

测试按钮点击

假设有一个计数器界面:

1
2
3
4
5
6
7
8
9
func NewCounterUI() (*widget.Label, *widget.Button) {
count := 0
label := widget.NewLabel("0")
button := widget.NewButton("加一", func() {
count++
label.SetText(strconv.Itoa(count))
})
return label, button
}

测试:

1
2
3
4
5
6
7
8
9
func TestCounterButton(t *testing.T) {
label, button := NewCounterUI()

test.Tap(button)

if label.Text != "1" {
t.Fatalf("want 1, got %s", label.Text)
}
}

测试输入框

1
2
3
4
5
6
7
8
9
func TestEntryInput(t *testing.T) {
entry := widget.NewEntry()

test.Type(entry, "hello")

if entry.Text != "hello" {
t.Fatalf("unexpected text: %s", entry.Text)
}
}

拆分业务逻辑

最容易测试的 Fyne 项目,通常会把业务逻辑和界面逻辑拆开。按钮回调里只做参数读取、调用业务函数、更新界面。

1
2
3
func BuildConfig(name string, debug bool) string {
return fmt.Sprintf("name=%s\ndebug=%t\n", name, debug)
}

这种函数可以用普通 Go 测试覆盖,不依赖图形界面。

测试建议

界面测试不需要覆盖每个像素。重点测试按钮回调、输入校验、状态切换、列表刷新、错误处理。真正复杂的逻辑,尽量放到普通 Go 函数里测。

 评论
评论插件加载失败
正在加载评论插件