Обсуждение статьи "Создание фреймворка для модульного тестирования на этапе компиляции в MQL5 с использованием утверждений препроцессора"

Опубликована статья Создание фреймворка для модульного тестирования на этапе компиляции в MQL5 с использованием утверждений препроцессора:

В MQL5 отсутствуют встроенные средства модульного тестирования, поэтому ошибки в служебных функциях расчёта размера лота, стоимости пункта и нормализации часто попадают в рабочий код. В этой статье представлен фреймворк без внешних зависимостей, построенный на макросах утверждений препроцессора, наборах тестов на основе интерфейсов и центральном средстве запуска тестов с модулем форматирования результатов. Он работает как скрипт в обработчике OnStart, выполняет детерминированные тесты и выводит сводку об успешных и неуспешных тестах на вкладку "Эксперты", позволяя выявить дефекты округления, обработки граничных значений и ошибок до развёртывания.

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

Данный тип ошибки не приведет к сбою работы советника и не вызовет появления кода ошибки в терминале. Она просто размещает ордер с объемом, который немного отличается от заданного, тем самым незаметно искажая профиль риска стратегии в ходе сотен сделок. Без формального утверждения, проверяющего точность результатов для известных входных данных, такие дефекты с накапливающимся эффектом остаются совершенно незаметными при поверхностном наблюдении.

Чтобы восполнить этот пробел, в статье разрабатывается фреймворк тестирования на самом MQL5, без внешних зависимостей. Архитектура основана на трёх структурных компонентах:

  • Макросы утверждений препроцессора: автоматически фиксируют исходный файл и точный номер строки, в которой тест завершился неудачей.
  • Наборы тестов на основе интерфейсов: изолируют и группируют связанную тестовую логику, поддерживая порядок в рабочей среде разработки.
  • Центральное средство запуска тестов: объединяет результаты отдельных тестов и выводит структурированную сводку об успешных и неуспешных тестах.

Вся система работает как стандартный скрипт MQL5, не требует никаких внешних инструментов и выводит результаты непосредственно на вкладку "Эксперты" терминала.

Последовательность работы фреймворка тестирования


Автор: Ushana Kevin Iorkumbul