Forzar una nueva prueba o deshabilitar el almacenamiento en caché

106

Problema:

Cuando ejecuto la misma prueba de marcha dos veces, la segunda ejecución no se realiza en absoluto. Los resultados son los almacenados en caché de la primera ejecución.

PASS    
ok      tester/apitests    (cached)

Enlaces

Ya verifiqué https://golang.org/cmd/go/#hdr-Testing_flags pero no hay una bandera cli para ese propósito.

Pregunta:

¿Existe la posibilidad de forzar la prueba para ejecutar siempre la prueba y no almacenar en caché los resultados de la prueba?

Simon Frey
fuente

Respuestas:

161

Hay algunas opciones como se describe en los documentos de marcas de prueba :

  • go clean -testcache: expira todos los resultados de la prueba
  • use indicadores que no se pueden almacenar en caché en su ejecución de prueba. La forma idiomática es usar-count=1

Dicho esto, los cambios en su código o código de prueba invalidarán los resultados de la prueba en caché (también hay una lógica extendida cuando se utilizan archivos locales o variables de entorno), por lo que no debería necesitar invalidar la caché de prueba manualmente.

Bagazo
fuente
4
Sigue siendo útil en caso de que esté probando contra una dependencia en movimiento, por ejemplo, una base de datos donde configura / elimina la dependencia pero no su código. Parece que OP estaba probando contra una API sin stub, que es lo que provocó su pregunta.
joakim
¿Es posible limpiar la caché solo para pruebas específicas?
nickcamillo
3
Tenga en cuenta que go clean -testcache ./...también funciona (en la parte superior de un monorepo)
voutasaurus
También abrí un problema para mejorar esto: github.com/golang/go/issues/39056?ts=4
wesm
23

En Go11, no pude deshabilitar el uso de caché GOCACHEcon módulos, usé en su -count=1lugar:

go test -count=1

Antes de Go11:

GOCACHE=off go test

O bien, limpie la caché de prueba y vuelva a ejecutar la prueba:

go clean -testcache && go test 
Muhammad Soliman
fuente
19

También se GOCACHE=offmenciona aquí .

soltysh
fuente
5
Porque go 1.11y tener la función de módulos go sobre el uso GOCACHE=offda un error go: cannot use modules with build cache disabled. Lo mejor es usar sugerido -count 1.
zdebra
1
Tienes razón, de acuerdo con github.com/golang/go/issues/26809#issuecomment-410477084 GOCACHE se eliminará gradualmente en la versión 1.12, por lo que ahora usarlo go test -count=1 ...es una opción más segura.
soltysh
build cache is disabled by GOCACHE=off, but required as of Go 1.12
Francesco Casula
7

La forma en que arreglé esto (estoy usando Visual Studio Code en macOS):

Código> Preferencias> Configuración

Haga clic en ...en el lado derecho de la página de configuración

Hacer clic Open settings.json

Ya sea:

  1. Agregue el siguiente fragmento a su archivo settings.json

    "go.testEnvVars": {
        "GOCACHE": "off"
    }
    
  2. Cambie el valor de go.testEnvVarspara incluir lo siguiente:"GOCACHE": "off"
señal distorsionada
fuente
4
Se requiere la creación de caché a partir de Go 1.12, por lo que la configuración GOCACHEno funcionará con las versiones recientes de Go. Una solución para VS Code es establecer "go.testFlags": ["-count=1"]la configuración.
Armand Grillet