Вопрос

Я работаю над реализацией 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");
    }
}

Это потребовало бы, чтобы я написал тысячи тестов, которые снова не стоят.

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top