Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menguji fungsi Golang untuk memastikan kebolehpercayaannya?
Pengujian kebolehpercayaan fungsi Golang melibatkan ujian unit, menggunakan pakej ujian untuk menguji satu fungsi secara berasingan, menggunakan jadual ujian untuk menguji berbilang input, mencipta ujian integrasi tunggal, menggunakan alat; seperti Perpustakaan github seperti .com/ory/dockertest menguji tingkah laku penyepaduan kod anda.
Cara menguji fungsi Golang untuk memastikan kebolehpercayaannya
Menulis fungsi yang boleh dipercayai di Golang adalah penting untuk membina aplikasi yang mantap dan stabil. Ujian adalah perlu untuk memastikan fungsi berfungsi seperti yang diharapkan. Artikel ini akan memperkenalkan cara menguji fungsi Golang dan menyediakan kes praktikal.
Ujian Unit
Ujian unit ialah teknik untuk menguji satu fungsi atau modul secara berasingan. Di Golang, gunakan pakej testing
包进行单元测试:
package mypkg import "testing" func TestAdd(t *testing.T) { tests := []struct { a, b, expected int }{ {1, 2, 3}, {3, 4, 7}, } for _, tt := range tests { actual := Add(tt.a, tt.b) if actual != tt.expected { t.Errorf("Add(%d, %d) = %d, expected %d", tt.a, tt.b, actual, tt.expected) } } }
表驱动的测试
表驱动的测试允许我们在使用相同测试函数的同时测试多个输入。这意味着我们可以为每个测试用例创建单独的测试表:
func TestAddTableDriven(t *testing.T) { tests := []struct { a, b, expected int }{ {1, 2, 3}, {3, 4, 7}, } for _, tt := range tests { t.Run(fmt.Sprintf("TestAdd(%d, %d)", tt.a, tt.b), func(t *testing.T) { actual := Add(tt.a, tt.b) if actual != tt.expected { t.Errorf("Add(%d, %d) = %d, expected %d", tt.a, tt.b, actual, tt.expected) } }) } }
子测试
子测试允许在单个测试函数中创建多个子测试。这有助于组织测试并提供更多详细的错误消息:
func TestError(t *testing.T) { t.Run("case 1", func(t *testing.T) { err := Error(0) if err != nil { t.Errorf("Error(0) = %v", err) } }) t.Run("case 2", func(t *testing.T) { err := Error(1) if err == nil { t.Error("Expected error for Error(1)") } }) }
集成测试
集成测试测试代码的集成行为,包括涉及多个函数的交互。在 Golang 中,可以使用 github.com/ory/dockertest
package mypkg_test import ( "context" "fmt" "io" "testing" "github.com/ory/dockertest" ) func TestIntegration(t *testing.T) { // 创建一个容器,在其中运行我们的代码 container, err := dockertest.NewContainer("my-org/my-image", "latest", nil) if err != nil { t.Fatal(err) } // 在容器中执行我们的代码 output, err := container.Run(context.Background()) if err != nil { t.Fatal(err) } // 检查输出以验证行为 if _, err := io.WriteString(output, "Hello World\n"); err != nil { t.Fatal(err) } fmt.Fprintln(output, "Done") // 等待容器退出 if err := container.Wait(); err != nil { t.Fatal(err) } }🎜Ujian dipacu jadual🎜🎜🎜Ujian dipacu jadual membolehkan kami menguji berbilang input serentak sambil menggunakan fungsi ujian yang sama. Ini bermakna kita boleh mencipta jadual ujian berasingan untuk setiap kes ujian: 🎜rrreee🎜🎜Subtests🎜🎜🎜Subtests membenarkan penciptaan berbilang subtest dalam satu fungsi ujian. Ini membantu mengatur ujian anda dan memberikan mesej ralat yang lebih terperinci: 🎜rrreee🎜🎜Ujian Penyepaduan🎜🎜🎜Ujian integrasi menguji kelakuan bersepadu kod anda, termasuk interaksi yang melibatkan berbilang fungsi. Di Golang, anda boleh menggunakan perpustakaan seperti
github.com/ory/dockertest
untuk ujian penyepaduan: 🎜rrreeeAtas ialah kandungan terperinci Bagaimana untuk menguji fungsi Golang untuk memastikan kebolehpercayaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!