Как я могу эффективно проверить сценарий?
-
23-10-2019 - |
Вопрос
Я работаю над реализацией 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 здесь, но что, если вы сохранили свои тесты в файле/базе данных/и т. Д. (Как указывает Даг - возможность хранить в управлении версиями делает файлы лучшим выбором!) У каждой записи может быть имя, сценарий и ожидаемый выход.
Затем вы можете просто написать небольшое приложение, которое выполняет каждый сценарий, используя ваш двигатель, и сравнивает выход с ожидаемой выходом и уведомляет вас об успехе/сбое на основе результата.
Это не спасло бы вас от необходимости проверить болевые точки в самом двигателе сценария, но может быть легче поддерживать что -то подобное, чем написать модульный тест для каждого способа, который вы можете представить, используя время выполнения сценариев.