Compartir a través de


Pruebas unitarias

Este artículo instructivo le muestra cómo crear y ejecutar casos de prueba confiables.

Requisitos previos

Debe tener una Power Platform experiencia de desarrollador unificada instalada y configurada en su máquina local y un Power Platform entorno de pruebas centrado en el desarrollador vinculado a ella. Es importante mantener la representación local y en la nube del código igual (sincronizada).

Más información : Instalar y configurar herramientas de desarrollo

Conceptos clave

  • Utilice SysTest Framework para crear código de prueba de unidad/componente
  • Aislamiento de la prueba

Utilice SysTest Framework para crear código de prueba de unidad/componente

Puede crear nuevos casos de prueba para probar la funcionalidad de una aplicación.

  1. Abierto Visual Studio.
  2. En el menú Archivo, seleccione Abrir>Proyecto/Solución y luego seleccione FleetManagementsolution en la carpeta del escritorio. Si el archivo de la solución no está en su computadora, los pasos para crearlo se enumeran en Escenario de un extremo a otro para la aplicación de muestra de administración de flotas.
  3. En el Explorador de soluciones, haga clic con el botón secundario en la solución Fleet Management, seleccione Agregar y, a continuación, elija Nuevo proyecto.
  4. Elija finanzas y operaciones como el tipo de proyecto a crear.
  5. Denomine este nuevo proyecto FleetManagementUnitTestSample, especifique la carpeta FleetManagement en el escritorio (C:\Users\Public\Desktop\FleetManagement) como ubicación y luego seleccione Aceptar.
  6. En el Explorador de soluciones, haga clic con el botón secundario en el nuevo proyecto y luego seleccione Propiedades.
  7. Establezca la propiedad Modelo en FleetManagementUnitTests y luego seleccione Aceptar.
  8. Ahora agregue una clase de prueba que contenga las pruebas con el código de administración de flota. Haga clic con el botón derecho en el proyecto FleetManagementUnitTestSample, seleccione Agregar y luego Nuevo elemento.
  9. En la ventana Agregar nuevo elemento, seleccione Clase de prueba como el tipo de elemento a agregar. Llame a la nueva clase FMUnitTestSample y seleccione Agregar.

La clase de plantilla contiene información que debería ayudarle a comenzar a escribir su prueba. En este ejemplo, la clase de prueba solo consta de dos pruebas, cada una marcada con el atributo SysTestMethod. Dado que los métodos no están sujetos a extensibilidad, se han adornado con un atributo Hookable(false). Además, la clase de prueba contiene un método llamado setup() que se llama antes de ejecutar cualquier prueba. Este método suele ser útil para configurar el estado compartido en todas las pruebas.

class FMUnitTestSample extends SysTestCase
{
    public void setup()
    {
        // Reset the test data to be sure things are clean
        FMDataHelper::main(null);
    }

    [SysTestMethod, Hookable(false)]
    public void testFMTotalsEngine()
    {
        FMRental rental;
        FMTotalsEngine fmTotals;
        FMRentalTotal fmRentalTotal;
        FMRentalCharge rentalCharge;
        FMRentalTotal expectedtotal;
        str rentalID = '000022';

        // Find a known rental
        rental = FMRental::find(rentalID);

        // Get the rental charges associated with the rental
        // Data is seeded randomly, so this will change for each run
        select sum(ExtendedAmount) from rentalCharge
                where rentalCharge.RentalId == rental.RentalId;

        fmTotals = FMTotalsEngine::construct();
        fmTotals.calculateRentalVehicleRate(rental);

        // Get the totals from the engine
        fmRentalTotal = fmTotals.totals(rental);

        // Set the expected amount
        expectedTotal = rental.VehicleRateTotal + rentalCharge.ExtendedAmount;

        this.assertEquals(expectedTotal,fmRentalTotal);
    }

    [SysTestMethod, Hookable(false)]
    public void testFMCarValidateField()
    {
        FMCarClass fmCar;

        fmCar.NumberOfDoors = -1;
        this.assertFalse(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors")));

        fmCar.NumberOfDoors = 4;
        this.assertTrue(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors")));
    }
}

Continúe siguiendo estas instrucciones restantes.

  1. Guarde la clase de prueba.
  2. Compile el proyecto haciendo clic con el botón derecho en el proyecto FleetManagementUnitTestSample en el Explorador de esoluciones y luego seleccione Compilar.

Después de haber solucionado cualquier problema diagnosticado por el compilador de X++, estará listo para ejecutar las pruebas unitarias utilizando el explorador de pruebas de Visual Studio. En la experiencia de desarrollador unificada, la ejecución se lleva a cabo en la nube con los datos que residen en el SQL Server en ejecución. Por lo tanto, debe implementar los resultados de su compilación en la nube siguiendo estos pasos.

  1. Seleccione el elemento de menú Implementar modelo para el proyecto FleetManagementUnitTests del menú contextual del proyecto en el Explorador de soluciones. Se le solicitará que se conecte a Power Platform si aún no lo está.

  2. Se muestra el cuadro de diálogo de implementación. Como no hemos agregado ninguna tabla nueva que deba sincronizarse con la base de datos, ahora realizamos el paso de implementación. Complete el cuadro de diálogo y elija Implementar.

    Cuadro de diálogo de implementación.

  3. En el menú Prueba de Visual Studio, abra el Explorador de pruebas.

  4. Seleccione Ejecutar prueba seleccionada para ejecutar en la nube los dos métodos de prueba del caso de prueba. Tenga en cuenta que actualmente no admitimos el menú de depuración en Test Explorer.

Test Explorer muestra los resultados de cada prueba una vez finalizada. Con suerte, todas tus pruebas tendrán éxito. De lo contrario, puede utilizar Test Explorer para navegar hasta el código de prueba infractor.

Aislamiento de la prueba

Para que una prueba sea de alto valor debe ser confiable. Una prueba debe pasar o fallar consistentemente independientemente de otros factores, como otras pruebas. Una causa típica de pruebas poco confiables es el estado de fuga, como los datos que quedan en la base de datos y que influyen en las pruebas posteriores. Otra causa de pruebas poco confiables es confiar en que las pruebas se llamen en un orden particular. Para evitar este tipo de problemas, puede utilizar el atributo SysTestTransaction.

TestTransactionMode Descripción
AutoRollback Predeterminado. Proporciona el mejor aislamiento.

Todas las transacciones se revierten mediante puntos de guardado de SQL y todas las declaraciones de la base de datos se enrutan a la conexión principal, incluidas las conexiones de usuario. No hay datos persistentes.
LegacyRollback Todas las declaraciones de inserción se rastrean y eliminan durante la limpieza.

Todas las declaraciones de inserción se degradan a fila por fila. Un caso de uso típico es cuando se prueban conexiones de usuarios o escenarios de concurrencia. Este nivel de aislamiento limpia los datos de configuración y la recomendación es envolver cada método de prueba en ttsBegin y ttsAbort.
LegacyRollbackWithUpdateTracking Todas las declaraciones de actualización, eliminación e inserción se rastrean y revierten durante la limpieza.

Se realiza un seguimiento de todas las declaraciones de inserción, actualización y eliminación y se degradan fila por fila. Este modo es el nivel de aislamiento más lento.
None Solo use este modo para la depuración. No proporciona aislamiento.

Esta configuración puede resultar útil para depurar temporalmente una prueba, ya que le permite utilizar la interfaz de usuario normal para navegar por los datos que creó la prueba.

Ejemplo:

    [SysTestTransaction(TestTransactionMode::LegacyRollback)]
    class MyTestSample extends SysTestCase

Creación de módulos de prueba para gestionar código de prueba y FormAdaptors

La creación de un módulo específico de prueba ayuda a mantener el código de prueba unido y manejable.

  1. Abra Visual Studio y vaya a Dynamics 365>Administración de modelos>Crear modelo.

  2. Ingrese el nombre del modelo, seleccione la capa y luego ingrese más detalles. Es una buena idea incluir la palabra Prueba en el nombre del módulo de prueba. La definición de compilación predeterminada está configurada para descubrir todos los módulos de prueba que contienen la palabra Prueba.

  3. Debido a que este modelo contiene formularios de la Plataforma/Fundación de aplicaciones, agregue referencias a los modelos seleccionados (marcados) en la siguiente figura.

    Cuadro de diálogo Crear modelo.

Consulte también

Escribir, implementar y depurar código X++