Sobes.tech
Middle+

Como testar a função printNumber sem esperar um segundo?

sobes.tech IA

Resposta da IA

Para testar a função printNumber, que chama time.Sleep(time.Second) internamente, sem esperar realmente um segundo, pode usar a injeção de dependência para a função de dormir. Em vez de chamar diretamente time.Sleep no código, passe a função de dormir como parâmetro ou use uma interface.

Exemplo:

package main

import (
    "fmt"
    "time"
)

type Sleeper func(d time.Duration)

func printNumber(sleep Sleeper, n int) {
    sleep(time.Second) // em vez de chamar diretamente time.Sleep
    fmt.Println(n)
}

// No teste, passe um substituto:
func main() {
    fakeSleep := func(d time.Duration) {
        // não faz nada para não esperar
    }
    printNumber(fakeSleep, 42) // irá imprimir 42 imediatamente
}

Dessa forma, nos testes, é possível substituir o sono real por uma função vazia, acelerando os testes e eliminando atrasos.