单元测试
测试图形程序
好的测试套件的一部分是能够快速编写测试并正确的运行。Fyne的API设计出来就是为了轻松测试。通过将组件逻辑和渲染分离开,我们可以加载程序的时候并不实际显示他们,并不用完全测试其功能。
案例
我们可以通过扩展Hello World程序来演示单元测试
go
func makeUI() (*widget.Label, *widget.Entry) {
return widget.NewLabel("Hello world!"),
widget.NewEntry()
}
func main() {
a := app.New()
w := a.NewWindow("Hello Person")
w.SetContent(container.NewVBox(makeUI()))
w.ShowAndRun()
}
为了测试这种输入行为,我们创建了一个新文件(名称以_test.go结尾,将其标记为测试),该文件定义了一个TestGreeter函数。
go
package main
import (
"testing"
)
func TestGreeting(t *testing.T) {
}
我们可以添加一个初始测试来验证初始状态,为此,我们测试从makeUI返回的Label的Text字段,如果测试不正确,则返回错误。将以下代码添加到测试方法中:
go
out, in := makeUI()
if out.Text != "Hello world!" {
t.Error("Incorrect initial greeting")
}
你可以使用go测试运行所有这些测试。-就像其他测试一样。这样做你现在会看到一个失败——因为我们没有添加迎宾逻辑。将makeUI函数更新为以下代码:
go
func makeUI() (*widget.Label, *widget.Entry) {
out := widget.NewLabel("Hello world!")
in := widget.NewEntry()
in.OnChanged = func(content string) {
out.SetText("Hello " + content + "!")
}
return out, in
}
这样做,您将看到测试现在通过了。您还可以运行完整的应用程序(使用go run),并在Entry字段中输入名称时看到问候语更新。还请注意,这些测试都在不显示窗口或窃取鼠标的情况下运行-这是Fyne单元测试设置的另一个好处。