Les proves són una part essencial del desenvolupament de programari, ja que asseguren que el codi funcioni com s'espera i ajuden a detectar errors abans que el programari arribi als usuaris finals. En aquest tema, aprendrem com escriure i executar proves en Go.
Continguts
Introducció a les Proves en Go
Go inclou un paquet integrat anomenat testing
que proporciona les eines necessàries per escriure i executar proves. Les proves en Go es col·loquen en fitxers separats amb el sufix _test.go
i es defineixen com a funcions que comencen amb la paraula Test
.
Estructura d'un Fitxer de Proves
Un fitxer de proves típic en Go té l'estructura següent:
Escriure Proves Bàsiques
Vegem un exemple pràctic. Suposem que tenim una funció que suma dos enters:
Podem escriure una prova per aquesta funció de la següent manera:
package main import ( "testing" ) func TestSuma(t *testing.T) { resultat := Suma(2, 3) esperat := 5 if resultat != esperat { t.Errorf("Suma(2, 3) = %d; esperat %d", resultat, esperat) } }
Proves de Taula
Les proves de taula són una manera eficient de provar múltiples casos en una sola funció de prova. Utilitzem una taula de dades d'entrada i sortida esperada, i iterem sobre ella.
package main import ( "testing" ) func TestSuma(t *testing.T) { proves := []struct { a, b, esperat int }{ {1, 1, 2}, {2, 2, 4}, {10, 5, 15}, } for _, prova := range proves { resultat := Suma(prova.a, prova.b) if resultat != prova.esperat { t.Errorf("Suma(%d, %d) = %d; esperat %d", prova.a, prova.b, resultat, prova.esperat) } } }
Proves de Benchmark
Les proves de benchmark mesuren el rendiment del codi. Es defineixen amb la paraula Benchmark
i utilitzen el tipus *testing.B
.
package main import ( "testing" ) func BenchmarkSuma(b *testing.B) { for i := 0; i < b.N; i++ { Suma(1, 2) } }
Proves de Cobertura
Per mesurar la cobertura de les proves, podem utilitzar l'eina integrada de Go. Executem les proves amb l'opció -cover
.
Això mostrarà el percentatge de codi cobert per les proves.
Exercicis Pràctics
Exercici 1: Escriure Proves per una Funció de Multiplicació
- Escriu una funció
Multiplica
que multipliqui dos enters. - Escriu una prova bàsica per la funció
Multiplica
. - Escriu una prova de taula per la funció
Multiplica
.
Solució
package main import ( "testing" ) func TestMultiplica(t *testing.T) { proves := []struct { a, b, esperat int }{ {1, 1, 1}, {2, 2, 4}, {10, 5, 50}, } for _, prova := range proves { resultat := Multiplica(prova.a, prova.b) if resultat != prova.esperat { t.Errorf("Multiplica(%d, %d) = %d; esperat %d", prova.a, prova.b, resultat, prova.esperat) } } }
Exercici 2: Escriure un Benchmark per la Funció de Multiplicació
- Escriu un benchmark per la funció
Multiplica
.
Solució
package main import ( "testing" ) func BenchmarkMultiplica(b *testing.B) { for i := 0; i < b.N; i++ { Multiplica(2, 3) } }
Conclusió
En aquest tema, hem après com escriure i executar proves en Go utilitzant el paquet testing
. Hem vist com estructurar fitxers de proves, escriure proves bàsiques, utilitzar proves de taula, realitzar proves de benchmark i mesurar la cobertura de les proves. Les proves són una part crucial del desenvolupament de programari i ajuden a garantir la qualitat i la fiabilitat del codi.
Curs de Programació en Go
Mòdul 1: Introducció a Go
- Introducció a Go
- Configuració de l'Entorn Go
- El Teu Primer Programa en Go
- Sintaxi i Estructura Bàsiques
Mòdul 2: Conceptes Bàsics
Mòdul 3: Estructures de Dades Avançades
Mòdul 4: Gestió d'Errors
Mòdul 5: Concurrència
Mòdul 6: Temes Avançats
Mòdul 7: Desenvolupament Web amb Go
Mòdul 8: Treballant amb Bases de Dades
Mòdul 9: Desplegament i Manteniment
- Construcció i Desplegament d'Aplicacions Go
- Registre
- Monitorització i Optimització del Rendiment
- Millors Pràctiques de Seguretat