Dalam bahasa Go, ujian integrasi digunakan untuk mengejek kebergantungan luaran untuk menguji fungsi. Menggunakan ginkgo dan gomega, anda boleh melakukan ujian penyepaduan berikut: uji panggilan API luaran, olok-olok http.Dapatkan fungsi dan sahkan respons. Uji interaksi pangkalan data, simulasi sambungan pangkalan data dan sahkan keputusan selepas memasukkan data.
Dalam bahasa Go, ujian integrasi ialah cara yang berkesan untuk menguji fungsi dengan mengejek kebergantungan luar. Dengan cara ini anda memastikan bahawa fungsi anda bukan sahaja berfungsi secara berasingan, tetapi juga dalam persekitaran dunia sebenar. Teknik ini penting untuk memastikan keteguhan dan kebolehpercayaan kod anda.
ginkgo
dan gomega
import ( "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" ) var ( sut MyFunction ) func init() { ginkgo.BeforeEach(func() { // 初始化依赖项模拟 // ... }) ginkgo.AfterEach(func() { // 清理依赖项模拟 // ... }) }
ginkgo
和 gomega
func TestCallExternalAPI(t *testing.T) { gomega.RegisterFailHandler(ginkgo.Fail) ginkgo.It("should call the external API successfully", func() { _, err := sut.CallExternalAPI() gomega.Expect(err).To(gomega.BeNil()) }) }
func TestReadFromDatabase(t *testing.T) { gomega.RegisterFailHandler(ginkgo.Fail) ginkgo.It("should read data from the database correctly", func() { records, err := sut.ReadFromDatabase() gomega.Expect(err).To(gomega.BeNil()) gomega.Expect(len(records)).To(gomega.BeGreaterThan(0)) }) }
func TestCallExternalAPI(t *testing.T) { gomega.RegisterFailHandler(ginkgo.Fail) ginkgo.BeforeEach(func() { // 模拟 http.Get 函数 http.Get = func(url string) (*http.Response, error) { return &http.Response{ Body: ioutil.NopCloser(bytes.NewBufferString(`{"success": true}`)), }, nil } }) ginkgo.It("should call the external API successfully", func() { _, err := sut.CallExternalAPI() gomega.Expect(err).To(gomega.BeNil()) }) }
考虑一个使用 http.Get
函数从外部 API 中获取数据的函数。我们可以模拟 http.Get
函数,并返回预期的响应:
func TestWriteToDatabase(t *testing.T) { gomega.RegisterFailHandler(ginkgo.Fail) ginkgo.BeforeEach(func() { // 模拟数据库连接 mockConn, err := sqlmock.New() if err != nil { t.Fatal(err) } mockDB, err := mockConn.DB() if err != nil { t.Fatal(err) } sut.SetDB(mockDB) // 模拟插入数据 mockConn.ExpectExec(`INSERT INTO my_table`). WithArgs("foo", "bar"). WillReturnResult(sqlmock.NewResult(1, 1)) }) ginkgo.It("should write data to the database successfully", func() { err := sut.WriteToDatabase("foo", "bar") gomega.Expect(err).To(gomega.BeNil()) }) }
考虑一个向数据库中写入数据的函数。我们可以使用 sqlmock
Uji panggilan API luaranrrreee
Kes praktikal
http.Get
. Kita boleh mengejek fungsi http.Get
dan mengembalikan respons yang dijangkakan: 🎜rrreeesqlmock
untuk mensimulasikan interaksi pangkalan data dan mengesahkan bahawa fungsi itu mengembalikan hasil yang betul selepas memasukkan data: 🎜rrreee🎜Dengan memanfaatkan petua ini, anda boleh menulis fungsi Go yang mantap dan boleh dipercayai, memastikan ia berfungsi dengan baik dalam persekitaran dunia sebenar juga boleh berfungsi seperti biasa. 🎜Atas ialah kandungan terperinci Kemahiran ujian integrasi dalam ujian fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!