我一直在进行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");
    }
}

这样做需要我编写数千个测试,这似乎不值得。

有帮助吗?

解决方案

只是在这里吐痰,但是如果您将测试存储在文件/数据库/等...(正如道格指出的 - 存储在版本控制中的能力是最佳选择!)每个条目都可以具有名称,脚本和预期的输出。

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

这不会使您免于需要测试脚本引擎本身中的痛点,但是维护类似的内容可能比为每种方式编写单元测试更容易,您可以使用脚本运行时设想。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top