2

私はECMAScriptの実装に取り​​組んでおり、現在プロジェクトの磨き上げに取り組んでいます。その一環として、私は次のようなテストを作成しています。

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

問題は、このテストおよび同様のテストには非常に多くの障害点があり、ほとんど価値がないように思われることです。モジュール間の結合を減らすために、私の努力を費やしたほうがよいようです。真の単体テストを作成するには、次のようなものを想定する必要があります。

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

これを行うには、何千ものテストを作成する必要がありますが、これも価値がないようです。

4

1 に答える 1

3

ここで唾を吐きますが、テストをファイル/データベースなどに保存した場合はどうなりますか...(ダグが指摘しているように、バージョン管理に保存できるため、ファイルが最適です!)各エントリには名前とスクリプトを含めることができます、および期待される出力。

次に、エンジンを使用して各スクリプトを実行し、出力を期待される出力と比較し、結果に基づいて成功/失敗を通知する小さなアプリを作成するだけです。

これにより、スクリプトエンジン自体の問題点をテストする必要がなくなりますが、スクリプトランタイムを使用して想定できる各方法の単体テストを作成するよりも、このようなものを維持する方が簡単な場合があります。

于 2010-06-03T15:04:02.657 に答える