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().

Пример тестируемого файла:

+

copy sample
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\\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));

Пример файла с юнит-тестами:

+

copy sample
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);
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

Импорты

Реализация списка на основе массива TArray

Базовые классы и функции коллекций

Библиотека для динамического создания функций из строковых шаблонов

Реализованные функции-компараторы (compare и equals)

Реализация исключений и блоков try/catch/finally

Вспомогательные классы и функции для реализации ООП паттернов

Релизация функций для сортировки массива

InMemory Database. Позволяет динамически создавать, заполнять структуру со схожим интерфейсом TbFile

Расширение стандартного класса TArray. Реализует всю базовую функциональность, за исключением переопределенного метода sort()

Полезные утилиты для работы со строковыми переменными

bankinter

rcw

rsexts

Известные зависимые

Библиотека вспомогательных классов и функций в ООП и функциональном стиле

Глобальные константы

const RUnitTest = GenObject("RUnitProperties")

Объект класса RUnitProperties для настройки поведения тестов

Функции

macro UT_LogResults ()

Выводит в лог результаты всех кейсов

macro UT_PrintResults ()

Выводит на экран результаты всех кейсов

Классы

Private Class RUnitProperties ()

Класс настроек библиотеки представленный RUnitTest

Class TestCase (_name)

Основной класс библиотеки, для написания юнит теста необходимо унаследоваться от него

Имена

Any

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\collections\ArrayList.mac

macro

..\mac\extra\OOP\SortingFunc.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

class

..\mac\extra\OOP\Comparators.mac

class

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

class

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\collections\Iterable.mac

class

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\OOP\SortingFunc.mac

macro

..\mac\extra\lambda\Lambda.mac

macro

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\collections\Iterable.mac

class

..\mac\extra\collections\Iterable.mac

macro

..\mac\extra\lambda\Lambda.mac

const

..\mac\extra\lambda\Lambda.mac

class

..\mac\extra\collections\Iterable.mac

class

..\mac\extra\collections\Iterable.mac

class

..\mac\extra\RUnit\MemDB.mac

class

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\collections\Iterable.mac

class

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\OOP\OOP.mac

macro

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\collections\Iterable.mac

const

..\mac\extra\collections\Iterable.mac

const

..\mac\extra\RUnit\RUnit.mac

class

..\mac\extra\utils\SArray.mac

class

..\mac\extra\collections\Iterable.mac

macro

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\utils\StringUtils.mac

macro

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\utils\StringUtils.mac

const

..\mac\extra\utils\StringUtils.mac

class

..\mac\extra\RUnit\MemDB.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\RUnit\RUnit.mac

macro

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\OOP\OOP.mac

Try

class

..\mac\extra\OOP\Exceptions.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\OOP.mac

class

..\mac\extra\OOP\Exceptions.mac

macro

..\mac\extra\RUnit\RUnit.mac

macro

..\mac\extra\RUnit\RUnit.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\Comparators.mac

macro

..\mac\extra\OOP\OOP.mac