No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Code coverage

18/30
Recursos

Aportes 14

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

✨ Mini resumen

Ejecutar los test con la bandera -coverprofile=coverage.out para obtener un coverage. Esto nos permite saber que parte del código hemos testeado y cual no:

$ go test -coverprofile=coverage.out

Para tener las metricas legibles del resultado del coverage usamos:

 // ver resumen resumen en la terminal
$ go tool cover -func=coverage.out
// o ver resumen en el navegador
$ go tool cover -html=coverage.out  

En Windows, cualquier comando con un flag que lleve un par clave/valor se debe colocar el doble guion:

--coverprofile=coverage.out
--html=coverage.out
--func=coverage.out

Esta clase es de las más valiosas del curso.

Muy buena la herramienta!!, ya para entornos un poco más productivos, la herramienta de Sonar nos puede ayudar también con el coverage!!!

Con la extensión oficial de go en VS Code se puede evidenciar el coverage también, solo se corren un test o los test de todo un package y te resalta con color verde lo que tienes cubierto, y rojo lo que falta por cubrir, súper útil para debuggear local también 😄

Summary:

  • Code coverage

    Test coverage is a measure used to describe the degree to which the source code of a program is executed when a particular test suite runs.

    If the software you are testing contains a total of 100 lines of code and the number of lines of code that is actually validated in the same software is 50, then the code coverage percentage of this software will be 50 percent.

    To test code coverage you can use:

    $ go test -cover
    

If you wanted to, you could profile the coverage with:

$ go test -coverprofile=coverage.out # save it
$ go tool cover -func=coverage.out # make it more readable
$ go tool cover -html=coverage.out # or view it on the browser
package main

import "testing"

func TestSum(t *testing.T) {
	tables := []struct {
		x int
		y int
		r int
	}{
		{1, 2, 3},
		{2, 2, 4},
		{3, 2, 5},
		{25, 26, 51},
	}

	for _, table := range tables {
		total := Sum(table.x, table.y)
		if total != table.r {
			t.Errorf("Sum(%d, %d) was incorrect, got: %d, want: %d.", table.x, table.y, total, table.r)
		}
	}
}

func TestMax(t *testing.T) {
	tables := []struct {
		x int
		y int
		r int
	}{
		{1, 2, 2},
		{2, 2, 2},
		{3, 2, 3},
		{25, 26, 26},
	}

	for _, table := range tables {
		max := GetMax(table.x, table.y)
		if max != table.r {
			t.Errorf("Max(%d, %d) was incorrect, got: %d, want: %d.", table.x, table.y, max, table.r)
		}
	}
}

Comandos
Indicador de % cubriendo las pruebas

  • go test -cover // Nos indica el nivel de cobertura de as pruebas

Para generar el archivo cover

  • go test -coverprofile=coverage.out //Usamos este archivo para tener metricas de nuestras pruebas y saber que parte de nuetsro codigo no hay pruebas

ver resumen resumen en la terminal

  • go tool cover -func=coverage.out //Indicamos que le eviamos las funciones de nuetsro archivo main.go, lista las funciones

Ver resumen en el navegador

  • go tool cover -html=coverage.out //genera un html que puedes usar el navegador para validar los procesos o funciones que no se han evaluado
No me funcionó en html desde wsl Por lo que entendí el comando usa el paquete xdg-open para abrir el navegador, pero no lo encuentra. Entonces reinstalé el paquete `sudo apt-get install --reinstall xdg-util` Aún así no lo abre con el navegador, entonces tuve que agregar el navegador que está en Windows a las variables de entorno, en mi caso Google Chrome Agregué esta línea al .bashrc `export BROWSER=/mnt/c/Program\ Files/Google/Chrome/Application/chrome.exe` Con esto ya me abre en el navegador pero no encuentra el archivo porque lo está buscando en el sistema de archivos de Windows y el archivo está en el sistema de archivos de Ubuntu. Entonces tuve que modificar la url en el navegador `-- file:///tmp/cover1737959177/coverage.html` `++ file://wsl.localhost/Ubuntu/tmp/cover1737959177/coverage.html`

Muy buena clase 🥸

a mi por algún motivo el -html=coverage.out no me funciona, no me lleva a la página web.

Para mac el comando coverage es el siguiente:

go test -v --cover

y los demás comandos de esta clase:

go test -coverprofile=cpverage.out
go tool cover -func=coverage.out
go tool cover -html=coverage.out

Muy interesante

😎