go testing 패키지 소개 및 사용

3474 단어 testinggolang
golang 표준 라 이브 러 리 testing 패 키 지 는 Go 코드 에 자동화 테스트 를 지원 합 니 다.go test명령 을 사용 하여 실행 합 니 다.
소개 하 다.
함수 테스트 정의:
func TestXxx(*testing.T)

이 TestXxx 함수 식 은 파일 의 끝 에 놓 여 있 습 니 다test.go 중.
간단 한 테스트:
func TestAbs(t *testing.T) {
    got := Abs(-1)
    if got != 1 {
        t.Errorf("Abs(-1) = %d; want 1", got)
    }
}

Benchmarks
함수 정의:
func BenchmarkXxx(*testing.B)

테스트 기준 은go test -bench을 통 해 집행 된다.
  • -cover명령 행 매개 변수,도달 율 정보 표시
  • 간단 한 기준 테스트:
    func BenchmarkHello(b *testing.B) {
        for i := 0; i < b.N; i++ {
            fmt.Sprintf("hello")
        }
    }
    
    BenchmarkHello    10000000    282 ns/op
    

    기준 함 수 는 b.N 회 를 실행 합 니 다.예 를 들 어 위의 10000000 번 의 실행 시간 은 282 ns 이다.
    Subtests and Sub-benchmarks(하위 테스트 와 하위 기준)
    이 피 드 테스트 는 표 구동 기준 테스트 와 레이 어 링 테스트 를 실현 할 수 있 습 니 다.일반적인 setup 과 teardown 방법 도 제공 할 수 있 습 니 다.
    func TestFoo(t *testing.T) {
        // 
        t.Run("A=1", func(t *testing.T) { ... })
        t.Run("A=2", func(t *testing.T) { ... })
        t.Run("B=1", func(t *testing.T) { ... })
        // 
    }
    

    Main
    테스트 코드 에 setup 과 teardown 을 추가 해 야 할 때 가 있 습 니 다.테스트 전과 그 후에.주 스 레 드 에서 실행 되 는 코드 를 제어 하여 다른 상황 을 지원 해 야 할 때 도 있다.코드 정의:
    func TestMain(m *testing.M)
    

    테스트 를 실행 할 때 테스트 를 직접 실행 하 는 것 이 아니 라 TestMain 을 호출 합 니 다.이 때 m.Run 의 전후 에 setup 과 teardown 방법 을 호출 할 수 있 습 니 다.
    func TestMain(m *testing.M) {
        // call flag.Parse() here if TestMain uses flags
      // setup
        code := m.Run()
      // teardown
        os.Exit(code)
    }
    

    상용 시험 방법
  • Error(args ...interface{})테스트 오류 정 보 를 출력 합 니 다.
  • Log(args ...interface{})테스트 로그 정 보 를 출력 합 니 다.
  • Parallel()동시 테스트.
  • Fatal(args ...interface{})치 명 적 인 오류 정보.
  • Skip(args ...interface{})이 테스트 오 류 를 건 너 뛰 었 습 니 다.

  • testdata testdata테스트 폴 더 에 테스트 에 필요 한 테스트 데이터,정적 파일 을 저장 할 수 있 습 니 다.
    표 구동 테스트(표 구동 테스트)
    표 테스트 는 데이터 시트 를 구축 하여 테스트 를 실행 하 는 방법 이다.subtest 와 결합 하여 각종 테스트 상황 을 덮어 쓸 수 있 습 니 다.
    func TestOrderSrv_OrderSendToPay(t *testing.T) {
        room := Room{}
        db.First(&room)
        order := test_createOrder(t, room)
    
        type args struct {
            order *models.Order
        }
        tests := []struct {
            name    string
            args    args
            wantErr bool
        }{
            {
                name: "    ",
                args: args{
                    order: order,
                },
                wantErr: false,
            },
        }
        for _, tt := range tests {
            t.Run(tt.name, func(t *testing.T) {
                s := &OrderSrv{}
                if err := s.OrderSendToPay(tt.args.order); (err != nil) != tt.wantErr {
                    t.Errorf("OrderSrv.OrderSendToPay() error = %v, wantErr %v", err, tt.wantErr)
                }
            })
        }
    }
    

    vscode 나 golandIDE 의 Go 플러그 인 을 사용 하여 테스트 용례 템 플 릿 생 성 을 지원 하 는 것 을 권장 합 니 다.
    Ref
  • 일부 Go 언어 표준 라 이브 러 리 의 표 구동 테스트 예
  • https://github.com/golang/go/blob/master/src/strconv/ftoa_test.go
  • https://github.com/golang/go/blob/master/src/path/match_test.go
  • https://github.com/golang/go/blob/master/src/archive/tar/strconv_test.go

  • 좋은 웹페이지 즐겨찾기