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.