¿Cómo puedo realizar el procesamiento general de la configuración de la prueba que prepara el escenario para todas las pruebas cuando se utiliza el paquete de pruebas ?
Como ejemplo en Nunit hay un [SetUp]
atributo.
[TestFixture]
public class SuccessTests
{
[SetUp] public void Init()
{ /* Load test data */ }
}
unit-testing
go
miltonb
fuente
fuente
Respuestas:
A partir de Go 1.4, puede implementar la configuración / desmontaje (no es necesario copiar sus funciones antes / después de cada prueba). La documentación se describe aquí en la sección principal :
Me tomó algún tiempo darme cuenta de que esto significa que si una prueba contiene una función
func TestMain(m *testing.M)
, esta función se llamará en lugar de ejecutar la prueba. Y en esta función puedo definir cómo se ejecutarán las pruebas. Por ejemplo, puedo implementar la configuración y el desmontaje global:Puede encontrar un par de otros ejemplos aquí .
fuente
TestMain
está una vez en un paquete, por lo que no es tan útil. Encuentro que las subpruebas son mejores para propósitos más complejos.lstat $GOROOT/subtests: no such file or directory
Esto se puede lograr poniendo una
init()
función en el_test.go
archivo. Esto se ejecutará antes de lainit()
función.Se llamará a _test.init () antes de la función del paquete init ().
fuente
[TestFixtureSetUp]
atributo de NUnit en su lugar.Dada una función simple para prueba unitaria:
Puede probarlo con una función de configuración que devuelve la función de desmontaje. Y después de llamar a setup (), puede realizar una llamada diferida a teardown ().
La herramienta de prueba Go informará las declaraciones de registro en la consola de shell:
Puede pasar algunos parámetros adicionales para configurar / desmontar con este enfoque.
fuente
Normalmente, las pruebas en go no están escritas con el mismo estilo que otros idiomas. A menudo, hay relativamente menos funciones de prueba, pero cada una contiene un conjunto de casos de prueba basado en tablas. Vea este artículo escrito por un miembro del equipo de Go.
Con una prueba basada en tablas, simplemente coloque cualquier código de configuración antes del ciclo que ejecuta los casos de prueba individuales especificados en la tabla, y luego coloque cualquier código de limpieza.
Si todavía tiene un código de configuración compartido entre las funciones de prueba, puede extraer el código de configuración compartido en una función y usar un
sync.Once
si es importante que se ejecute exactamente una vez (o como sugiere otra respuesta, useinit()
, pero esto tiene la desventaja de que la configuración se realizará incluso si los casos de prueba no se ejecutan (quizás porque ha limitado los casos de prueba mediante el usogo test -run <regexp>
).Yo diría que si cree que necesita una configuración compartida entre diferentes pruebas que se ejecutan exactamente una vez, debería pensar si realmente la necesita, y si una prueba basada en tablas no sería mejor.
fuente
El marco de pruebas de Go no tiene nada equivalente al atributo SetUp de NUnit (marcando una función que se llamará antes de cada prueba en la suite). Sin embargo, hay algunas opciones:
Simplemente llame a su
SetUp
función desde cada prueba donde sea necesario.Utilice una extensión del marco de pruebas de Go que implementa paradigmas y conceptos de xUnit. Me vienen a la mente tres opciones fuertes:
Cada una de estas bibliotecas lo alienta a organizar sus pruebas en suites / accesorios similares a otros marcos de xUnit, y llamará a los métodos de configuración en el tipo de suite / accesorio antes de cada uno de los
Test*
métodos.fuente
Enchufe descarado, creé https://github.com/houqp/gtest para ayudar a resolver exactamente este problema.
Aquí hay un ejemplo rápido:
Puede crear cualquier grupo de prueba que desee dentro de un paquete con cada uno de ellos utilizando un conjunto diferente de rutinas de configuración / desmontaje.
fuente