Frage

Ich habe an einer ECMAScript -Implementierung gearbeitet und arbeite derzeit daran, das Projekt zu polieren. Als Teil davon habe ich Tests wie Folgendes geschrieben:

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

Das Problem ist, dass es in diesem Test so viele Ausfallpunkte und ähnliche Tests gibt, dass es sich fast nicht lohnt. Es scheint fast, als ob meine Anstrengungen besser damit verbracht werden würden, die Kopplung zwischen Modulen zu reduzieren. Um einen echten Unit -Test zu schreiben, müsste ich so etwas annehmen:

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

Wenn ich dies tun würde, muss ich Tausende von Tests schreiben, die es erneut nicht wert sind.

War es hilfreich?

Lösung

Spitballing hier nur hier, aber was ist, wenn Sie Ihre Tests in einer Datei/Datenbank/usw. gespeichert haben (wie Doug betont - die Möglichkeit, in der Versionskontrolle in Versionen zu speichern und die erwartete Ausgabe.

Anschließend können Sie einfach eine kleine App schreiben, die jedes Skript mit Ihrer Engine ausführt und die Ausgabe mit der erwarteten Ausgabe vergleicht und Sie von Erfolg/Ausfall basierend auf dem Ergebnis benachrichtigt.

Dies würde Sie nicht davor bewahren, die Schmerzpunkte in der Skript -Engine selbst zu testen, aber es ist möglicherweise einfacher, so etwas zu pflegen, als einen Unit -Test für jeden Weg zu schreiben, den Sie sich vorstellen können, wenn Sie die Skriptlaufzeit verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top