Dalam Go, fungsi tak segerak boleh diuji unit dengan ujian serentak untuk mensimulasikan pelaksanaan serentak dan menguji kelakuan fungsi tak segerak. Langkah-langkahnya adalah seperti berikut: Buat konteks tamat masa. Buat saluran untuk menerima keputusan. Panggil fungsi tak segerak dan tulis hasilnya ke saluran. Baca hasil daripada saluran dan semak nilai yang dijangkakan. Gunakan penyata pilih untuk mengendalikan tamat masa atau keputusan yang diterima.
Kaedah ujian unit untuk fungsi tak segerak dalam Go
Dalam Go, fungsi tak segerak (juga dikenali sebagai coroutines) boleh diuji unit melalui ujian serentak. Ujian konkurensi membolehkan kami mensimulasikan pelaksanaan serentak untuk menguji kelakuan fungsi tak segerak.
Kes praktikal
Andaikan kita mempunyai fungsi tak segerak dipanggil greetAsync()
yang menerima nama dan mengembalikan rentetan chan
dengan mesej ucapan. Begini cara untuk menguji unit fungsi ini menggunakan ujian serentak: greetAsync()
的异步函数,它接收一个名称并返回一个带有问候消息的 chan string
。以下是如何使用并发测试对该函数进行单元测试:
package async import ( "context" "testing" "time" ) func TestGreetAsync(t *testing.T) { tests := []struct { name string expected string }{ {"Alice", "Hello Alice!"}, {"Bob", "Hello Bob!"}, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { // 创建一个超时上下文 ctx, cancel := context.WithTimeout(context.Background(), 5 * time.Second) defer cancel() // 创建一个通道来接收结果 ch := make(chan string, 1) // 调用 greetAsync() 并将结果写入通道 go greetAsync(ctx, test.name, ch) // 从通道中读取结果并检查预期值 select { case r := <-ch: if r != test.expected { t.Errorf("expected %q, got %q", test.expected, r) } case <-ctx.Done(): t.Errorf("timeout waiting for response") } }) } } func greetAsync(ctx context.Context, name string, ch chan string) { select { case <-ctx.Done(): return // 上下文已超时,返回 default: // 上下文仍在有效期内,发送问候消息 ch <- "Hello " + name + "!" } }
在这个示例中,我们设置了一个超时上下文,使用 select
rrreee
select
untuk membaca hasil daripada saluran atau tamat masa dan menjalankan tamat masa dalam kedua-dua Buat penegasan untuk mengesahkan tingkah laku yang dijangkakan. 🎜Atas ialah kandungan terperinci Kaedah ujian unit untuk fungsi tak segerak dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!