Pregunta

He estado trabajando en una implementación de ECMAScript y actualmente estoy trabajando para pulir el proyecto. Como parte de esto, he estado escribiendo pruebas como las siguientes:

[TestMethod]
public void ArrayReduceTest()
{
    var engine = new Engine();
    var request = new ExecScriptRequest(@"
        var a = [1, 2, 3, 4, 5];
        a.reduce(function(p, c, i, o) {
            return p + c;
        });
    ");
    var response = (ExecScriptResponse)engine.PostWithReply(request);
    Assert.AreEqual((double)response.Data, 15D);
} 

El problema es que hay tantos puntos de falla en esta prueba y pruebas similares que casi no parece que valga la pena. Casi parece que mi esfuerzo se gastaría mejor reduciendo el acoplamiento entre los módulos. Para escribir una verdadera prueba unitaria, tendría que asumir algo como esto:

[TestMethod]
public void CommentTest()
{
    const string toParse = "/*First Line\r\nSecond Line*/";
    var analyzer = new LexicalAnalyzer(toParse);
    {
        Assert.IsInstanceOfType(analyzer.Next(), typeof(MultiLineComment));
        Assert.AreEqual(analyzer.Current.Value, "First Line\r\nSecond Line");
    }
}

Hacer esto me requeriría que escriba miles de pruebas que una vez más no parece que valga la pena.

¿Fue útil?

Solución

Simplemente escupir aquí, pero ¿qué pasa si almacena sus pruebas en un archivo/base de datos/etc ... (como señala Doug, la capacidad de almacenar en el control de versiones hace que los archivos la mejor opción!) Cada entrada podría tener un nombre, un script y la salida esperada.

Luego, podría escribir una pequeña aplicación que ejecute cada script usando su motor y compara la salida con la salida esperada, y le notifica sobre el éxito/falla en función del resultado.

Esto no le evitaría que necesite probar los puntos de dolor en el motor de script en sí, pero podría ser más fácil mantener algo como esto que escribir una prueba unitaria para cada forma que pueda imaginar utilizando el tiempo de ejecución de secuencias de comandos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top