代码之家  ›  专栏  ›  技术社区  ›  ChaosPandion

如何有效地测试脚本引擎?

  •  2
  • ChaosPandion  · 技术社区  · 15 年前

    我一直在致力于一个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");
        }
    }
    

    这样做将需要我写成千上万的测试,这似乎再次不值得。

    1 回复  |  直到 14 年前
        1
  •  3
  •   AlexCuse    15 年前

    只是说说而已,但是如果你把你的测试存储在一个文件/数据库/等等(正如Doug所指出的-存储在版本控制中的能力使文件成为最佳选择!)每个条目可以有一个名称、一个脚本和预期的输出。

    然后您可以编写一个小应用程序,使用您的引擎执行每个脚本,并将输出与预期输出进行比较,并根据结果通知您成功/失败。