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:

package main

import (
    "testing"
)

func TestNomDeLaFunció(t *testing.T) {
    // Codi de prova aquí
}

Escriure Proves Bàsiques

Vegem un exemple pràctic. Suposem que tenim una funció que suma dos enters:

package main

func Suma(a, b int) int {
    return a + b
}

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.

go test -cover

Això mostrarà el percentatge de codi cobert per les proves.

Exercicis Pràctics

Exercici 1: Escriure Proves per una Funció de Multiplicació

  1. Escriu una funció Multiplica que multipliqui dos enters.
  2. Escriu una prova bàsica per la funció Multiplica.
  3. Escriu una prova de taula per la funció Multiplica.

Solució

package main

func Multiplica(a, b int) int {
    return a * b
}
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ó

  1. 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.

© Copyright 2024. Tots els drets reservats