Тривиль — модульное тестирование

Сделана «тривиальная» система модульного тестирования, встроенная в компилятор. Сделано так:

  1. В папке модуля надо сделать подпапку «_тест_», исходные файлы в которой:
    • не компилируются при нормальной компиляции
    • а в режиме «модульного тестирования» компилируются вместе с модулем, как его часть. Тем самым, тесты получают доступ ко всем сущностям модуля (не только к экспортированным)
  2. В тестовой части должна быть функция: фн Тестировать(т: тест-основа.Основа), которая и будет вызвана при тестировании. Тест-основа — это класс, определенный в библиотеке.

Вот выдержка из исходников для тестирования библиотеки «строки» (текст можно посмотреть здесь):

фн Тестировать*(т: тест-основа.Основа) {
т-соединить(т) // тест функции соединить.
}

Для понимания, функция «соединить» является аналогом Go strings.Join, она собирает из списка строк одну строку, вставляя разделитель:

фн соединить*(разделитель: Строка, строки: …Строка): Строка

Для тестирования функции задаются данные:

пусть тесты-соединить = Все-соединить[

Один-соединить{раз: «+», арг: ТСтроки[«ы», «ы»], отв: «ы+ы»},
Один-соединить{раз: «++», арг: ТСтроки[«ыы», «цц»], отв: «ыы++цц»},

]

И далее, в самой функции «т-соединить» эти данные перебираются, проверяя ответ:

пусть в = тесты-соединить[№]
пусть ответ = соединить(в.раз, в.арг…)
если ответ = в.отв {
т.успех(ф(«соединить %v», №))
} иначе {
т.ошибка(ф(«соединить %v», №), «‘%v’ # ‘%v'», ответ, в.отв)
}

Запуск «tric +тест стд::строки» строит исполняемый файл, который выполняет все тесты и выдает итог.

Отметить могу два момента:

  • тестирование сделано без функциональных типов. Это не от вредности, а от того, что я ленюсь делать их в Тривиле. Естественно, в след. языках будет нормальная поддержка функциональных типов и замыканий.
  • очевидный недостаток — это то, что аварии не перехватываются. То есть нельзя написать тесты на обязательность аварии.

Кроме модульного тестирования, идет работа над минимальным набором библиотек для раскрутки компилятора. Сделаны простейшие файлы «стд::файлы», надеюсь скоро добраться до лексера.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *