ūü•á Pruebas, 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 terminos 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 codídog 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, paa 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.

Pruebas, Benchmark. Logs, Introducción.
comments powered by Disqus