Introducción a la escritura de pruebas
Antes de empezar a escribir nuestro programa, vamos a hablar sobre las pruebas y a crear nuestra primera prueba. Las pruebas de paquetes proporcionan compatibilidad con las pruebas automatizadas de paquetes de Go. Las pruebas son importantes para asegurarse de que el código funciona según lo previsto. Por lo general, debe haber al menos una prueba para cada función en un paquete para confirmar la funcionalidad.
A la hora de codificar, es recomendable seguir utilizar el enfoque de desarrollo controlado por pruebas (TDD). Con este enfoque, escribiremos las pruebas primero. Nos aseguraremos de que se produzca un error en las pruebas porque el código que prueban todavía no existe. Después, escribiremos el código que cumple los requisitos de las pruebas.
Creación del archivo de prueba
En primer lugar, es necesario crear el archivo de Go para mantener todas las pruebas del paquete bankcore
. Cuando se crea un archivo de prueba, el nombre del archivo tiene que finalizar con _test.go
. Puede poner todo lo que desee antes, pero el patrón es usar el nombre del archivo que está probando.
Además, todas las pruebas que desee escribir deben ser una función que comience por Test
. Normalmente escribe un nombre descriptivo para la prueba que está escribiendo, como TestDeposit
.
Vaya a la ubicación $GOPATH/src/bankcore/
y cree un archivo denominado bank_test.go
con el siguiente contenido:
package bank
import "testing"
func TestAccount(t *testing.T) {
}
Abra un terminal y asegúrese de que se encuentra en la ubicación $GOPATH/src/bankcore/
. Después, use el siguiente comando para ejecutar las pruebas en modo detallado:
go test -v
Go buscará todos los archivos *_test.go
para ejecutar las pruebas, por lo que debería ver la siguiente salida:
=== RUN TestAccount
--- PASS: TestAccount (0.00s)
PASS
ok github.com/msft/bank 0.391s
Escritura de una prueba que no se supera
Antes de escribir cualquier código, vamos a escribir primero una prueba que no se supera para él mediante el uso de TDD. Modifique la función TestAccount
con el código siguiente:
package bank
import "testing"
func TestAccount(t *testing.T) {
account := Account{
Customer: Customer{
Name: "John",
Address: "Los Angeles, California",
Phone: "(213) 555 0147",
},
Number: 1001,
Balance: 0,
}
if account.Name == "" {
t.Error("can't create an Account object")
}
}
Hemos introducido una estructura para la cuenta y el cliente que todavía no hemos implementado. Y vamos a usar la función t.Error()
para indicar que la prueba producirá un error si algo no ocurre tal y como se supone que tiene que suceder.
Además, tenga en cuenta que la prueba tiene la lógica para crear un objeto de cuenta (que aún no existe). Pero estamos diseñando en este momento cómo nos gustaría interactuar con nuestro paquete.
Nota:
Le proporcionaremos el código para las pruebas porque no queremos dar explicaciones línea por línea. Sin embargo, el modelo mental debe empezar poco por poco y realizar tantas iteraciones como sea necesario.
En nuestro caso, vamos a realizar una sola iteración: escriba la prueba, asegúrese de que no se supera y escriba el código que cumple los requisitos de la prueba. A la hora de programar por su cuenta, debe comenzar de manera simple y agregar complejidad a medida que avanza.
Al ejecutar el comando go test -v
, debería ver una prueba que no se supera en la salida:
# github.com/msft/bank [github.com/msft/bank.test]
.\bank_test.go:6:13: undefined: Account
.\bank_test.go:7:13: undefined: Customer
FAIL github.com/msft/bank [build failed]
Vamos a dejarlo aquí por ahora. Completaremos esta prueba y crearemos nuevas pruebas mientras escribimos la lógica para nuestro sistema de banco en línea.