Buscar..


Sintaxis

  • unittest {...} - un bloque que solo se ejecuta en modo "unittesting"
  • assert (<expresión que se evalúa como booleano>, <mensaje de error opcional>)

Bloques unittest

Las pruebas son una excelente manera de garantizar aplicaciones estables y libres de errores. Sirven como una documentación interactiva y permiten modificar el código sin temor a romper la funcionalidad. D proporciona una sintaxis conveniente y nativa para el bloque unittest como parte del lenguaje D. Los bloques unittest en cualquier lugar de un módulo D pueden usarse para probar la funcionalidad del código fuente.

/**
Yields the sign of a number.
Params:
    n = number which should be used to check the sign
Returns:
    1 for positive n, -1 for negative and 0 for 0.
*/
T sgn(T)(T n)
{
    if (n == 0)
        return 0;
    return (n > 0) ? 1 : -1;
}

// this block will only be executed with -unittest
// it will be removed from the executable otherwise
unittest
{
    // go ahead and make assumptions about your function
    assert(sgn(10)  ==  1);
    assert(sgn(1)   ==  1);
    assert(sgn(-1)  == -1);
    assert(sgn(-10) == -1);
}

Ejecutando test unit

Si el indicador -unittest se pasa al compilador D, ejecutará todos los bloques de -unittest . A menudo es útil dejar que el compilador genere una función main aplastada. Usando el compilador y ejecute wrapper rdmd , probar su programa D es tan fácil como:

rdmd -main -unittest yourcode.d

Por supuesto, también puede dividir este proceso en dos pasos si desea:

dmd -main -unittest yourcode.d
./yourcode

Para proyectos de dub , compilar todos los archivos y ejecutar sus bloques de prueba de unidad se puede hacer de manera conveniente con

dub test

Consejo profesional: define `tdmd` como alias de shell para guardar las propinas.
alias tdmd="rdmd -main -unittest"

y luego prueba tus archivos con:

tdmd yourcode.d

Prueba de unidad anotada

Para el código con plantilla, a menudo es útil verificar que los atributos de la función (por ejemplo, @nogc se deducen correctamente. Para garantizar esto para una prueba específica y, por lo tanto, escribir todo el test de unidad puede anotarse)

@safe @nogc pure nothrow unittest
{
    import std.math;
    assert(exp(0)  ==  1);
    assert(log(1)  ==  0);
}

Tenga en cuenta que, por supuesto, en D, cada bloque se puede anotar con atributos y los compiladores, por supuesto, verifican que sean correctos. Entonces, por ejemplo, lo siguiente sería similar al ejemplo anterior:

unittest
{
    import std.math;
    @safe {
        assert(exp(0)  ==  1);
        assert(log(1)  ==  0);
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow