La prueba de software es un proceso que evalúa las métricas de los programas utilizando herramientas, scripts o manualmente.
La prueba es una parte integral del ciclo de desarrollo de software. Las pruebas exhaustivas proporcionan información detallada sobre la integridad de su aplicación.
Puede prevenir y corregir errores escribiendo pruebas, evaluando el rendimiento del programa y automatizando los flujos de trabajo.
Primeros pasos con las pruebas en Go
La biblioteca estándar de Go proporciona una evolución pruebas paquete. los pruebas El paquete tiene evaluación comparativa, fuzzing, omisión, subprueba, subevaluación comparativa y otras funcionalidades.
Probar con este paquete es fácil. Aquí hay una estructura de prueba simple que servirá como modelo para la prueba:
escribe Casos estructura {
// el resultado esperado de la prueba
esperado En t// la salida de la función
actual En t
// el valor que estás pasando a la función
argumento cuerda
}
Aquí hay una función simple que convierte cadenas en números enteros. Su prueba probará esta función.
importar (
"strconv"
)funcióncadena a entero(calle cuerda)En t {
entero, error := strconv. Atoi (calle)si error! = nulo {
devolver0
}
devolver entero
}
los cadena a entero función devuelve 0 si hay un error en la conversión y el entero si no hay errores.
Aquí hay una función de prueba para StringToInteger:
funciónTestStringToInteger(prueba * prueba. T) {
EnteroEsperado := StringToInteger("3")caseInstance := Casos {
esperado: esperadoInt,
actual: 3,
}
si caseInstance.esperado == caseInstance.actual {
// algún código aquí
} más {
prueba. Fallar()
}
}
los TestStringToInteger La función de prueba acepta una pruebas. T objeto como su argumento. los esperadoInt variable contiene el resultado de la conversión de cadena. los casoInstancia variable es la estructura Cases instanciada para la prueba. los si declaración compara los valores esperados y reales.
los Fallar El método devuelve una prueba fallida en la instrucción else si los valores no son iguales.
Ir proporciona un prueba Comando para automatizar y recuperar información sobre sus pruebas y programas.
Vamos prueba
Vamos prueba de ayuda
La página de ayuda proporciona información detallada sobre cómo ir a prueba obras:
El ecosistema Go alberga muchas bibliotecas que hacen que las pruebas sean más accesibles y flexibles. Hay muchas funciones más allá de la pruebas paquete, incluyendo regresión y pruebas unitarias.
El paquete testificar
El paquete Testificar es uno de los marcos Go más populares para probar paquetes. Proporciona las herramientas que necesitará para escribir pruebas eficientes, con aserciones sencillas, burlas y funciones de conjunto de pruebas.
Testify es adecuado para el desarrollo basado en pruebas, ya que el paquete proporciona una imitar paquete. Esto proporciona un mecanismo para escribir objetos simulados que puede usar en lugar de objetos reales en las pruebas.
El paquete también proporciona:
- Un afirmar paquete que proporciona métodos útiles para escribir pruebas fáciles de leer.
- A requerir paquete similar al afirmar paquete para devolver resultados booleanos.
- A suite paquete para suites de prueba con estructuras.
Testificar se extiende sobre el pruebas paquete, y puede utilizar el ir a prueba Comando para ejecutar pruebas escritas con el paquete Testify.
Testify es compatible con las versiones de Go desde la 1.13. Puede agregar el paquete como una dependencia del proyecto con este comando:
Vamos obtener github.com/stretchr/testify
Aquí hay una prueba de afirmación simple con el paquete Testify afirmar paquete:
paquete principal
importar (
"pruebas"
"github.com/stretchr/testificar/afirmar" // afirmar solo el paquete
)// el nombre de la función debe ser "Algo" por convención
funciónProbarAlgo(t * prueba. T) {
// afirmando la igualdad
afirmar. Igual (t, 123, 123, "deberían ser iguales")
// afirmación de la desigualdad
afirmar. No es igual (t, 123, 456, "no deberían ser iguales")
}
los ProbarAlgo función de prueba toma la estructura de tipo de prueba de la pruebas paquete como argumento. los Igual y No es igual Los métodos son para afirmaciones basadas en la igualdad y la desigualdad de Testify. afirmar paquete.
El paquete GoConvey
IrConvey es una herramienta de prueba Go preparada para la expresividad sobre el pruebas paquete. Incluye terminal (CLI) y navegador (GUI) probando la funcionalidad.
El paquete GoConvey se integra con el pruebas paquete, que proporciona una interfaz de usuario web para trabajar con pruebas Go nativas. También incluye funcionalidad para pruebas de regresión, salidas personalizables y generación de código de prueba. Puede ejecutar pruebas automáticamente, acceder a formatos de cobertura en HTML y personalizar la GUI.
Ejecute este comando en la terminal de su espacio de trabajo de Go para instalar el paquete Go Convey.
Vamos obtener github.com/smartystreets/goconvey
Aquí hay un ejemplo simple de cómo escribir pruebas con el paquete GoConvey.
paquete principal
importar (
. "github.com/smartystreets/goconvey/convey"
"pruebas"
)funciónProbarAlgo(t * prueba. T) {
// Solo pasa t a llamadas Convey de nivel superior
Convey("Declarar variable", t, función() {
x := 1Convey("variable de incremento", función() {
x++
Convey("afirmar igualdad", función() {
Entonces (x, debe ser igual, 2)
})
})
})
}
Deberá importar el transmitir paquete usando la notación de puntos para la prueba.
La función Convey de la Transmitir El paquete ayuda con el alcance de la prueba. El último Transmitir La llamada de función en el ejemplo de código afirma la igualdad entre el X variable y 2, utilizando el debe ser igual función.
El paquete de expectativa HTTP
los Espera HTTP package es un paquete declarativo, conciso y fácil de usar para las pruebas de API REST y HTTP de extremo a extremo de Go. Puede usarlo para crear solicitudes HTTP de forma incremental e inspeccionar las respuestas y sus cargas útiles de forma recursiva.
los httpesperar El paquete es un conjunto de constructores encadenables para solicitudes HTTP y aserciones en respuestas HTTP y cargas útiles. Está construido sobre el http, pruebasy otros paquetes. El paquete también funciona bien con el integrado prueba http paquete.
httpesperar proporciona funcionalidad para la creación de solicitudes con construcción de URL, encabezados, cookies y cargas útiles. Maneja aserciones de respuesta, aserciones de carga útil, impresión bonita y WebSockets.
Ejecute este comando en la terminal de su directorio de trabajo para instalar el httpesperar paquete.
Vamos obtener github.com/gavv/httpexpect
Aquí hay un ejemplo simple de probar una función de controlador con el httpesperar paquete.
paquete principal
importar (
"fmt"
"github.com/gavv/httpexpect/v2"
"red/http"
"red/http/httptest"
"pruebas"
)funciónejemploManejador()http.Manipulador {
devolver http. ManejadorFunc(función(escritor http. ResponseWriter, solicitud *http. Solicitud) {
fmt. Fprintln (escritor, "Hola Mundo")
})
}funciónTestexampleHandler(t * prueba. T) {
// crear http. Manipulador
manejador := manejador de ejemplo()// ejecutar el servidor usando httptest
servidor := httptest. NewServer (manejador)
aplazar servidor. Cerca()// crea una instancia de expectativa http
esperar := httpesperar. Nuevo (t, servidor. dirección URL)
// ¿está funcionando?
suponer. OBTENER("/").
Suponer().
Estado (http. EstadoOK).JSON().Array().Empty()
}
los ejemploManejador La función handler devuelve un controlador HTTP para el httpesperar paquete. los TestexampleHandler La función declara una instancia de la función del controlador. Luego crea un nuevo servidor para probar el punto final con el prueba http paquete.
los suponer la variable es tu httpesperar instancia que golpea el OBTENER solicite la ruta raíz del punto final en el servidor. los Estado función devuelve el código de estado (en este caso, 200) si la prueba tiene éxito.
Escribir pruebas comprensivas e intuitivas
Las pruebas contribuyen en gran medida a evaluar la integridad de su aplicación, y hay muchos patrones y métodos de prueba que puede usar para sus programas. En el núcleo de su flujo de trabajo de prueba, debe escribir pruebas intuitivas que pueda mejorar a medida que sus programas cambian con el tiempo.