Dans Go, les fonctions asynchrones peuvent être testées unitairement avec des tests de concurrence pour simuler une exécution simultanée et tester le comportement de la fonction asynchrone. Les étapes sont les suivantes : Créez un contexte de délai d'attente. Créez une chaîne pour recevoir les résultats. Appelez une fonction asynchrone et écrivez le résultat sur le canal. Lisez le résultat du canal et vérifiez la valeur attendue. Utilisez les instructions select pour gérer les délais d'attente ou les résultats reçus.
Méthodes de tests unitaires pour les fonctions asynchrones dans Go
Dans Go, les fonctions asynchrones (également appelées coroutines) peuvent être testées unitairement via des tests de concurrence. Les tests de concurrence nous permettent de simuler des exécutions simultanées pour tester le comportement des fonctions asynchrones.
Cas pratique
Supposons que nous ayons une fonction asynchrone appelée greetAsync()
qui reçoit un nom et renvoie une chan string
avec un message de bienvenue. Voici comment tester unitairement cette fonction à l'aide de tests de concurrence : 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
pour lire le résultat du canal ou du délai d'attente, et exécutons un délai d'attente dans les deux Faites des assertions pour vérifier le comportement attendu. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!