He creado una prueba de integración como proyecto de prueba de Visual Studio 2017. Este proyecto se ejecutará como un paso de compilación VSTS.

Específicamente, estoy probando la función correcta de una aplicación de aprovisionamiento de base de datos (PostgreSQL).

Esto significa que esta prueba unitaria utilizará la API de aprovisionamiento para crear una base de datos y un usuario de la base de datos en el servidor de la base de datos, y la prueba también validará la estructura correcta del esquema, las tablas y las columnas de la base de datos.

Esto da como resultado que el servidor de bases de datos contenga varias bases de datos construidas solo a partir de la ejecución de la prueba de integración.

Está previsto que las bases de datos fallidas permanezcan en el servidor para que puedan analizarse en busca de todos los errores, pero no tenemos necesidad de mantener los DB probados con éxito.

Mi problema actual es que, dado que la prueba se encuentra en un Proyecto de prueba unitaria, los métodos de prueba ejecutan sus afirmaciones y ya está.

¿Cómo puedo activar una secuencia de comandos para eliminar la base de datos del servidor Postgres cuando mi prueba de integración pasa al 100%?

Solo tengo ideas sobre qué hacer. ¿Ejecuto un paso de compilación VSTS adicional después del paso de prueba para ejecutar el script? ¿O hago que mis métodos de prueba devuelvan un bool y recopilen los bools al final del proyecto en un método que ejecute el script?

2
as.beaulieu 19 ene. 2018 a las 21:19

3 respuestas

La mejor respuesta

Desde la perspectiva de un control de calidad y pruebas de integración, en NUnit (y otros) hay pasos de configuración y desmontaje que se ejecutan antes y después de cada prueba. Podrías poner algo en el paso Teardown para confirmar que la prueba pasó y, de ser así, llamar a un script para abandonar la tabla.

    [TearDown]
    public void CleanUp()
    {
        if (TestContext.CurrentContext.Result.Outcome.ToString().Equals("Passed")
        {
            // Run Script to Drop Table
            // Confirm Table Dropped
            // Close Driver
            driver.Close();
            Console.WriteLine("Table Drop Confirmed and Driver Closed.");
        } else {
            Console.WriteLine("Test did not pass, Table not dropped.");
            driver.Close();
            Console.WriteLine("Driver Closed.");
        }
    }
3
LoflinA 19 ene. 2018 a las 18:45

En los marcos de prueba que he usado, las afirmaciones funcionan arrojando excepciones cuando fallan. La ejecución de la prueba termina en ese punto. Si suelta la tabla al final de la prueba, después de la afirmación, no se ejecutará si la prueba falla (ya que la ejecución se detendría en la afirmación fallida), pero se ejecutaría si la prueba pasara.

0
Erresen 19 ene. 2018 a las 18:51

Esto podría resolver sus problemas: NUnit: ¿es posible comprobar en TearDown si la prueba se realizó correctamente?

NUnit proporciona una forma de acceder a su resultado de ejecución de prueba, para que pueda verificar si tiene éxito / falla y luego realizar una limpieza u omitirlo.

1
Petras Purlys 19 ene. 2018 a las 19:30