Question

Je travaille sur une mise en œuvre ECMAScript et je travaille actuellement sur le polissage le projet. En tant que partie de cela, je suis en train d'écrire des tests comme suit:

[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);
} 

Le problème est qu'il ya tant de points d'échec dans ce test et des tests similaires que presque ne semblent pas la peine. Il semble presque comme mon effort serait mieux dépensé réduire le couplage entre les modules. Pour écrire un vrai test unitaire je dois prendre quelque chose comme ceci:

[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");
    }
}

Faire cela me obligerait à écrire des milliers de tests qui ne semble pas une fois de plus la peine.

Était-ce utile?

La solution

Juste spitballing ici, mais si vous avez stocké vos tests dans un fichier / base de données / etc ... (comme points Doug sur - la capacité à stocker dans le contrôle de version permet des fichiers le meilleur choix) Chaque entrée peut avoir un nom , un script, et la sortie prévue.

Alors vous pouvez simplement écrire une petite application qui exécute chaque script en utilisant votre moteur et compare la sortie à la sortie attendue, et vous avertit de la réussite / échec en fonction du résultat.

Cela ne vous sauvera pas d'avoir besoin de tester les points de douleur dans le moteur de script lui-même, mais il pourrait être plus facile de maintenir quelque chose comme ceci que d'écrire un test unitaire pour chaque façon que vous pouvez envisager d'utiliser le moteur d'exécution de script.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top