>  기사  >  백엔드 개발  >  Go의 비동기 함수에 대한 단위 테스트 방법

Go의 비동기 함수에 대한 단위 테스트 방법

WBOY
WBOY원래의
2024-05-01 15:36:01365검색

Go에서는 동시 실행을 시뮬레이션하고 비동기 함수의 동작을 테스트하기 위해 동시성 테스트를 통해 비동기 함수를 단위 테스트할 수 있습니다. 단계는 다음과 같습니다. 시간 초과 컨텍스트를 만듭니다. 결과를 받아보려면 채널을 만드세요. 비동기 함수를 호출하고 결과를 채널에 씁니다. 채널에서 결과를 읽고 예상값을 확인합니다. 시간 초과 또는 수신된 결과를 처리하려면 select 문을 사용하세요.

Go 中异步函数的单元测试方法

Go의 비동기 함수에 대한 단위 테스트 방법

Go에서는 동시성 테스트를 통해 비동기 함수(코루틴이라고도 함)를 단위 테스트할 수 있습니다. 동시성 테스트를 통해 동시 실행을 시뮬레이션하여 비동기 함수의 동작을 테스트할 수 있습니다.

실용 사례

이름을 받고 인사말 메시지와 함께 chan string을 반환하는 greetAsync()라는 비동기 함수가 있다고 가정해 보겠습니다. 동시성 테스트를 사용하여 이 기능을 단위 테스트하는 방법은 다음과 같습니다. 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 + "!"
    }
}

在这个示例中,我们设置了一个超时上下文,使用 selectrrreee

이 예에서는 시간 초과 컨텍스트를 설정하고 select를 사용하여 채널 또는 시간 초과의 결과를 읽은 다음 두 가지 모두에서 시간 초과를 실행합니다. 예상되는 동작을 확인하기 위해 어설션을 수행합니다. 🎜

위 내용은 Go의 비동기 함수에 대한 단위 테스트 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.