Go Básico: Testando Saída do Console (stdout) com os.Pipe
Testar a saída do console em programas Go pode ser um desafio, especialmente quando queremos garantir que nossas funções estão imprimindo o resultado correto em nossas aplicações de CLI. Neste artigo, vamos explorar como usar os.Pipe para capturar e verificar a saída do console de maneira eficaz, permitindo a criação de testes unitários robustos para suas funções que escrevem na saída padrão (os.Stdout).
Para exemplificar, vamos utilizar o seguinte exemplo como demonstração, simulando uma possível aplicação.
package main
import (
"fmt"
)
func printSomething(s string) {
fmt.Println(s)
}
func main() {
printSomething("Hello, World!")
}
Agora vamos supor que queremos testar esta função printSomething e validar se ela realmente está imprimindo o que desejamos de maneira correta.
package main
import (
"io"
"os"
"testing"
)
func Test_printSomething(t *testing.T) {
// Save the original standard output
stdOut := os.Stdout
// Create a pipe to capture the standard output
r, w, _ := os.Pipe()
// Redirect the standard output to the pipe writer
os.Stdout = w
// Call the printSomething function with the message and the WaitGroup
printSomething("This is a test")
// Close the pipe writer
w.Close()
// Read the content from the pipe reader
result, _ := io.ReadAll(r)
// Restore the original standard output
//
//At the end of the test, we restore os.Stdout to ensure that the program's
//environment returns to its normal state, allowing the rest of the program
//and other tests to function correctly.
os.Stdout = stdOut
// Check if the captured output is equal to the expected string
if string(result) != "This is a test\n" {
// If not, the test fails and displays an error message
t.Errorf("Expected 'This is a test', got %s", result)
}
}
A função os.Pipe no pacote os da linguagem Go é usada para criar um canal de comunicação unidirecional entre dois pontos, chamado de pipe. Ela é útil para redirecionar a saída de uma função ou processo para outro, permitindo a comunicação entre diferentes partes de um programa.
Comentários
Postar um comentário