¿Qué es el code coverage (cobertura del código)?
La cobertura de las pruebas es una medida con la cual se puede conocer que porcentaje del código ha sido validado en términos de su funcionamiento mediante código de pruebas.
package robot
import "fmt"
func Controlador(i int) (comando string, err error) {
err = nil
switch i {
case 100:
comando = "encender"
break
case 200:
comando = "apagar"
break
case 300:
comando = "avanzar"
break
case 400:
comando = "saludar"
break
default:
comando = ""
err = fmt.Errorf("Opción invalida")
}
return
}
En el ejemplo anterior tenemos un robot que es operado a través de una función Controlador
, esta recibe un código numérico que representa la instrucción a ejecutar y retorna el comando en ejecución en forma de string.
Dentro de la función Controlador tenemos un switch con todas las posibles entradas, y un valor default que representa inactividad cuando no se reconoce un código valido.
Para cada uno de los escenarios es necesario crear una función de prueba, para ello podemos apoyarnos de una tabla de pruebas como hemos visto anteriormente.
package robot
import "testing"
type ControladorTest struct {
codigo int
want string
}
var controladorTests = []ControladorTest{
{codigo: 100, want: "encender"},
{codigo: 200, want: "apagar"},
{codigo: 300, want: "avanzar"},
{codigo: 400, want: "saludar"},
{codigo: 500, want: ""},
}
func TestControladorTests(t *testing.T) {
for _, test := range controladorTests {
got, _ := Controlador(test.codigo)
if got != test.want {
t.Errorf("Controlador(%v) = %v, se esperaba %v", test.codigo, got, test.want)
}
}
}
Ahora que tenemos todos los casos cubiertos, basta con ejecutar la prueba con la instrucción cover para saber cuantos de los posibles caminos han sido cubiertos.
go test -cover
En este caso la salida es del 100%.
PASS
coverage: 100.0% of statements
Para experimentar las diferentes coberturas, podemos comentar alguna de las líneas de controladoresTest
y ver que sucede cuando estas se omiten, podremos darnos cuenta que los porcentajes de coberturas de las pruebas disminuyen cuanto mas lineas se comentan.