Sobes.tech
Middle+

Как да тествате функцията printNumber без да чакате секунда?

sobes.tech AI

Отговор от 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 веднага
}

По този начин, в тестовете може да се замени реалният сън с празна функция, което ускорява тестовете и премахва забавяния.