Solución:
Puede usar ioutil.TempDir o TempFile del mismo paquete.
Solo para comparar versus lo que tienes ioutil.TempDir
, así es como se ven las cosas con io.Reader
:
// Load main.conf from the specified file path
func LoadMainSettings(src io.Reader) (*MainSettings, error) {
b, err := ioutil.ReadAll(src)
if err != nil { return nil, err }
r := &MainSettings{}
err = json.Unmarshal(b, r)
if err != nil { return nil, err }
return r, nil
}
Específicamente, cambiamos el argumento de un path
cadena a un src
io.Reader
instancia, y reemplazamos el ioutil.ReadFile
con un ioutil.ReadAll
.
El caso de prueba que ha escrito termina siendo un poco más corto precisamente porque podemos prescindir de las operaciones de archivo:
s, err := LoadMainSettings(strings.NewReader("{...sample config data...}"))
Desde la versión 1.15 de Go, ahora hay T.TempDir()
en el estándar testing
paquete. Los documentos lo explican de la siguiente manera:
TempDir devuelve un directorio temporal para que lo use la prueba. Cleanup elimina automáticamente el directorio cuando se completa la prueba y todas sus subpruebas. Cada llamada posterior a t.TempDir devuelve un directorio único; si la creación del directorio falla, TempDir termina la prueba llamando a Fatal.