Sobes.tech
Back to questions
Middle+
2

Как протестировать функцию printNumber без ожидания секунды?

Companies where asked
МВидеоМВидео

Answer from AI

sobes.tech AI

Чтобы протестировать функцию printNumber, которая внутри себя вызывает time.Sleep(time.Second), без реального ожидания секунды, можно использовать инъекцию зависимости для функции сна. Вместо прямого вызова time.Sleep в коде, передавайте функцию сна как параметр или используйте интерфейс.

Пример:

package main

import (
    "fmt"
    "time"
)

type Sleeper func(d time.Duration)

func printNumber(sleep Sleeper, n int) {
    sleep(time.Second) // вместо прямого вызова time.Sleep
    fmt.Println(n)
}

// В тесте передаем заглушку:
func main() {
    fakeSleep := func(d time.Duration) {
        // ничего не делаем, чтобы не ждать
    }
    printNumber(fakeSleep, 42) // сразу выведет 42
}

Таким образом, в тестах можно заменить реальный сон на пустую функцию, что ускорит тестирование и избавит от задержек.