Как я могу эффективно протестировать скрипт-движок? - PullRequest
2 голосов
/ 03 июня 2010

Я работал над реализацией 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 Ответ

3 голосов
/ 03 июня 2010

Просто плеваться здесь, но что, если вы сохранили свои тесты в файле / базе данных / и т. Д ... (как указывает Дуг - возможность хранить в системе контроля версий делает файлы лучшим выбором!) Каждая запись может иметь имя , сценарий и ожидаемый результат.

Тогда вы могли бы просто написать небольшое приложение, которое выполняет каждый скрипт с использованием вашего движка и сравнивает вывод с ожидаемым выводом и уведомляет вас об успехе / неудаче на основе результата.

Это не избавит вас от необходимости тестировать болевые точки в самом скриптовом движке, но может быть проще поддерживать что-то подобное, чем писать модульный тест для каждого способа, который вы можете себе представить, используя среду выполнения скриптов.

...