База Hintsage

Тестирование

Unit-тесты, table-driven tests, mocks, race detector и benchmarks.

Практика

Вопросы: Тестирование

Какой порядок сообщений и очистки даст этот тест, и почему параллельный subtest не начинает выполнять тело сразу?

package config

import (
    "fmt"
    "testing"
)

func TestConfig(t *testing.T) {
    t.Cleanup(func() { fmt.Println("parent cleanup") })
    t.Run("parallel", func(t *testing.T) {
        t.Parallel()
        t.Cleanup(func() { fmt.Println("child cleanup") })
        fmt.Println("child body")
    })
    fmt.Println("parent body")
}

Вам дали benchmark, в котором результат вычисления нигде не используется. Какой риск это создаёт для достоверности измерения?

package checksum

import "testing"

func sum(data []byte) uint64 {
    var result uint64
    for _, value := range data {
        result += uint64(value)
    }
    return result
}

func BenchmarkSum(b *testing.B) {
    data := make([]byte, 1024)
    for i := 0; i < b.N; i++ {
        sum(data)
    }
}
Программирование GoТестированиеGo-разработчик, отвечающий за производительность и качество тестов

После рефакторинга функция начала добавлять контекст к sentinel-ошибке. Какую проверку следует использовать здесь, чтобы сохранить смысл теста?

package service

import (
    "errors"
    "fmt"
    "testing"
)

var ErrNotFound = errors.New("not found")

func load() error {
    return fmt.Errorf("load config: %w", ErrNotFound)
}

func TestLoad(t *testing.T) {
    if err := load(); err != ErrNotFound {
        t.Fatalf("got %v", err)
    }
}
Программирование GoТестированиеРазработчик Go в backend-команде

Показано 1–20 из 50