En esta sección, abordaremos los pasos finales para completar tu proyecto en Go: las pruebas y el despliegue. Asegurarte de que tu aplicación funcione correctamente y esté lista para ser utilizada en un entorno de producción es crucial. Vamos a desglosar este proceso en dos partes principales: pruebas y despliegue.

Pruebas

  1. Tipos de Pruebas

Pruebas Unitarias

Las pruebas unitarias se centran en probar funciones individuales para asegurarse de que funcionan correctamente de manera aislada.

package main

import (
    "testing"
)

func TestSum(t *testing.T) {
    total := Sum(5, 5)
    if total != 10 {
        t.Errorf("Sum was incorrect, got: %d, want: %d.", total, 10)
    }
}

Pruebas de Integración

Las pruebas de integración verifican que diferentes partes de tu aplicación funcionen juntas correctamente.

package main

import (
    "testing"
)

func TestDatabaseConnection(t *testing.T) {
    db, err := ConnectToDatabase()
    if err != nil {
        t.Fatalf("Failed to connect to database: %v", err)
    }
    defer db.Close()
    
    // Additional integration tests
}

Pruebas Funcionales

Las pruebas funcionales aseguran que la aplicación completa funcione según lo esperado.

package main

import (
    "net/http"
    "net/http/httptest"
    "testing"
)

func TestHomePage(t *testing.T) {
    req, err := http.NewRequest("GET", "/", nil)
    if err != nil {
        t.Fatal(err)
    }

    rr := httptest.NewRecorder()
    handler := http.HandlerFunc(HomePageHandler)
    handler.ServeHTTP(rr, req)

    if status := rr.Code; status != http.StatusOK {
        t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK)
    }

    expected := `Welcome to the Home Page!`
    if rr.Body.String() != expected {
        t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected)
    }
}

  1. Herramientas de Pruebas

Go Test

La herramienta go test es la forma estándar de ejecutar pruebas en Go.

go test ./...

Cobertura de Código

Para verificar la cobertura de tus pruebas, puedes usar la opción -cover.

go test -cover ./...

Herramientas de Terceros

  • Testify: Un paquete que proporciona utilidades para pruebas y afirmaciones.
  • Ginkgo: Un marco de pruebas BDD (Behavior-Driven Development) para Go.

  1. Ejercicio Práctico

Ejercicio: Escribe una prueba unitaria para una función que calcula el factorial de un número.

package main

import (
    "testing"
)

func Factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * Factorial(n-1)
}

func TestFactorial(t *testing.T) {
    result := Factorial(5)
    if result != 120 {
        t.Errorf("Factorial was incorrect, got: %d, want: %d.", result, 120)
    }
}

Solución:

package main

import (
    "testing"
)

func Factorial(n int) int {
    if n == 0 {
        return 1
    }
    return n * Factorial(n-1)
}

func TestFactorial(t *testing.T) {
    result := Factorial(5)
    if result != 120 {
        t.Errorf("Factorial was incorrect, got: %d, want: %d.", result, 120)
    }
}

Despliegue

  1. Construcción de la Aplicación

Para construir tu aplicación Go, puedes usar el comando go build.

go build -o myapp

  1. Contenedores Docker

Dockerfile

Un Dockerfile es un archivo de texto que contiene todos los comandos necesarios para ensamblar una imagen de Docker.

# Usa una imagen base de Go
FROM golang:1.17

# Establece el directorio de trabajo
WORKDIR /app

# Copia el código fuente al contenedor
COPY . .

# Construye la aplicación
RUN go build -o myapp

# Define el comando de inicio
CMD ["./myapp"]

Construcción y Ejecución de la Imagen Docker

docker build -t myapp .
docker run -p 8080:8080 myapp

  1. Despliegue en la Nube

Google Cloud Platform (GCP)

  1. Autenticación: Asegúrate de estar autenticado en tu cuenta de GCP.

    gcloud auth login
    
  2. Configuración del Proyecto: Selecciona tu proyecto de GCP.

    gcloud config set project [PROJECT_ID]
    
  3. Despliegue: Usa gcloud para desplegar tu aplicación.

    gcloud app deploy
    

Amazon Web Services (AWS)

  1. Instalación de AWS CLI: Asegúrate de tener AWS CLI instalado y configurado.

    aws configure
    
  2. ECS (Elastic Container Service): Puedes usar ECS para desplegar contenedores Docker.

    aws ecs create-cluster --cluster-name myCluster
    aws ecs create-service --cluster myCluster --service-name myService --task-definition myTask
    

  1. Ejercicio Práctico

Ejercicio: Crea un Dockerfile para una aplicación Go simple y despliega la imagen en Docker.

Solución:

  1. Dockerfile:

    FROM golang:1.17
    
    WORKDIR /app
    
    COPY . .
    
    RUN go build -o myapp
    
    CMD ["./myapp"]
    
  2. Construcción y Ejecución:

    docker build -t myapp .
    docker run -p 8080:8080 myapp
    

Conclusión

En esta sección, hemos cubierto los aspectos esenciales de las pruebas y el despliegue de aplicaciones en Go. Aprendiste sobre diferentes tipos de pruebas, herramientas de pruebas, y cómo construir y desplegar tu aplicación usando Docker y servicios en la nube. Con estos conocimientos, estás listo para asegurar la calidad y disponibilidad de tus aplicaciones en un entorno de producción. ¡Felicidades por llegar hasta aquí y completar tu proyecto en Go!

© Copyright 2024. Todos los derechos reservados