unit testing - tutorial - ¿Cómo probar las principales funciones del paquete en golang?
spy golang (3)
Cambie el nombre del paquete de main a foobar en ambas fuentes. Mueva los archivos de origen en src / foobar.
mkdir -p src/foobar
mv main.go main_test.go src/foobar/
Asegúrese de establecer GOPATH en la carpeta donde reside src / foobar.
export GOPATH=`pwd -P`
Probarlo con
go test foobar
Quiero probar algunas funciones que se incluyen en mi paquete principal, pero mis pruebas no parecen poder acceder a esas funciones.
Mi archivo main.go de muestra se ve como:
package main
import (
"log"
)
func main() {
log.Printf(foo())
}
func foo() string {
return "Foo"
}
y mi archivo main_test.go se ve como:
package main
import (
"testing"
)
func Foo(t testing.T) {
t.Error(foo())
}
cuando corro go test main_test.go
me sale
# command-line-arguments
./main_test.go:8: undefined: foo
FAIL command-line-arguments [build failed]
Según tengo entendido, incluso si moviera el archivo de prueba a otro lugar e intenté importar desde el archivo main.go, no podría importarlo, ya que es el package main
.
¿Cuál es la forma correcta de estructurar tales pruebas? ¿Debo eliminar todo del paquete main
además de una función principal simple para ejecutar todo y luego probar las funciones en su propio paquete, o hay alguna forma de que llame a esas funciones desde el archivo principal durante la prueba?
Las pruebas unitarias solo van tan lejos. En algún momento tienes que ejecutar el programa. Luego prueba que funciona con entrada real, desde fuentes reales, produciendo salida real a destinos reales. De verdad.
Si desea realizar una prueba unitaria, retírela del main ().
cuando especifica archivos en la línea de comando, debe especificarlos todos
Aquí está mi carrera:
$ ls
main.go main_test.go
$ go test *.go
ok command-line-arguments 0.003s
nota, en mi versión, corrí con main.go y main_test.go en la línea de comandos
Además, su _test archivo no es del todo correcto, necesita que su función de prueba se llame TestXXX y lleve un puntero a testing.T
Aquí está la versión modificada:
package main
import (
"testing"
)
func TestFoo(t *testing.T) {
t.Error(foo())
}
y la salida modificada:
$ go test *.go
--- FAIL: TestFoo (0.00s)
main_test.go:8: Foo
FAIL
FAIL command-line-arguments 0.003s