RUnit. Библиотека для юнит-тестирования.
..\mac\extra\RUnit\RUnit.mac
Библиотека для легкого тестирования пользовательских классов, макросов и модулей, написанных на RSL. Использует рефлексию, поэтому для создания тестов, необходимо следовать простым шагам:
- Создаём отдельный макрофайл.
- Импортируем библиотеку
import "..\\mac\\extra\\RUnit\\RUnit.Mac";
- Если тестируется исполняемый модуль, то в тексте него после иннициализации глобных переменных и до начала исполнения необходимо добавить строку
if (ExecMacro("RUnitMarker")) return; end;
, что завершит выполнение модуля, при его импорте в тест, но не остановит исполнение при
работе.
- Импортируем тестируемый модуль
- При необходимости настраиваем поведение RUnit, через свойства объект RUnitTest.
- Создаем тестовый кейс как класс, расширяющий TestCase.
- Тестовые методы называем начиная со слова
test_
- Все остальные вспомогательные методы и поля класса называем иначе.
Для запуска тестов существует два варианта:
- По умолчанию настройка AUTO_RUN_UNIT_TEST ==
true
, что запускает тесты при вызове деструктора обхъекта кейса, поэтому необходимо в конце файла создать инстанс тестового кейса, не присваивая его переменной. НапримерMyTestCase();
. - Выставить значение AUTO_RUN_UNIT_TEST ==
false
. Запустить тест методом TestCase.RunCase.
Для вывода результатов теста, существует также два вариант в зависимости от настройки AUTO_PRINT_RESULT :
- По умолчанию значение
true
. Дополнительных манипуляций производить не нужно. При вызове деструктора в конце работы программы результаты теста выведутся на экран. - Если установить значение
false
. В нужный момент работы програмы вызвать функцию UT_PrintResults().
Для логирования всё аналогично выводу на экран. За вывод отвечает настройка AUTO_LOG_RESULT :
- По умолчанию значение
true
. В конце работы программы результаты тестов запишутся в лог. - Если установить значение
false
. Необходимо вызвать функцию UT_LogResults().
Пример тестируемого файла:
+

import "..\\Mac\\Extra\\OOP\\Exceptions.mac";
Macro calcSum(a, b)
return a+b;
End;
Macro calcMult(a, b)
return a*b;
End;
Macro calcDiv(a, b)
if (b == 0)
return Throw(IllegalArgumentException("Делить на ноль не стоит"));
end;
return a/b;
End;
if (ExecMacro("RUnitMarker")) return; end;
// Во время тестов до этого места исполнение не дойдет
var a = 20, b = 10;
println(calcSum(a, b));
println(calcMult(a, b));
println(calcDiv(a, b));
Пример файла с юнит-тестами:
+

import "../mac/extra/RUnit/RUnit.mac";
import "../mac/extra/_samples/RUnit/TestedFile.mac";
Class (TestCase) TestCalc()
Macro test_sum()
assertEquals(20, calcSum(5, 15));
assertEquals(10, calcSum(-5, 15));
End;
Macro test_mult()
assertTrue(25==calcMult(5, 5));
End;
Macro test_div()
assertEquals(3, calcDiv(15, 5));
assertException(IllegalArgumentException, calcDiv(20, 0))
End;
End;
setThrowMode(2);
TestCalc();
setThrowMode(0);
Макрофайлы
MemDB
..\mac\extra\RUnit\MemDB.mac
InMemory Database. Позволяет динамически создавать, заполнять структуру со схожим интерфейсом TbFile
Импорты
Базовые классы и функции коллекций
Библиотека для динамического создания функций из строковых шаблонов
Реализованные функции-компараторы (compare и equals)
Реализация исключений и блоков try/catch/finally
Вспомогательные классы и функции для реализации ООП паттернов
Релизация функций для сортировки массива
InMemory Database. Позволяет динамически создавать, заполнять структуру со схожим интерфейсом TbFile
Полезные утилиты для работы со строковыми переменными
bankinter
rcw
rsexts
Известные зависимые
Библиотека вспомогательных классов и функций в ООП и функциональном стиле
Глобальные константы
const RUnitTest = GenObject("RUnitProperties")
Объект класса RUnitProperties для настройки поведения тестов
Функции
macro UT_LogResults ()
Выводит в лог результаты всех кейсов
macro UT_PrintResults ()
Выводит на экран результаты всех кейсов
Классы
Private Class RUnitProperties ()
Класс настроек библиотеки представленный RUnitTest
Class TestCase (_name)
Основной класс библиотеки, для написания юнит теста необходимо унаследоваться от него