Тестовая Система предназначена для упрощения создания тестов, автоматического их запуска, и обработки результатов.
Каждый тест представляет собой функцию имеющую тип TestResult (*FTestFunction)(void).
Тестовая Система позволяет регистрировать тесты-функции. При регистрации, кроме самой функции, указывается дополнительная информация: строка с именем тестируемой функции, строка с именем класса к которому эта функция принадлежит, строка с кратким описанием теста.
Для упрощения написания и регистрации тестов Тестовая Система содержит макрос TEST(className, functionName, description), используемый для объявления и регистрации теста-функции. Он создает функцию
TestResult t_className_functionName(),
и затем регистрирует ее следующим образом
static bool t_className_functionName_value = CTestCollection::registerTest(t_className_functionName, className, functionName, description);
Существуют, также, упращенные макросы:
Рассмотрим простой пример теста для функции gcd из библиотеки Arageli:
#include "ts/ts.hpp"
#include "arageli/arageli.hpp"
using namespace Arageli;
TEST_FUNCTION(gcd)
{
int a = 8;
int b = 64;
int g = gcd(a, b);
if(0 != a%g || 0 != b%g)
{
tout << "GCD fails with"
<< " gcd( " << a << ", " << b << ") = " <<
g << "\n";
return resFAIL;
}
return resOK;
}
Как мы можем видеть, написание теста предельно просто.
В начале файла должно стоять включение заголовочного файла ts/ts.hpp. За ним должны идти остальные, необходимые тесту, заголовочные файлы и, далее, нужно написать саму функцию теста. Для вывода результатов теста (плохих или хороших) необходимо пользоваться потоком tout, определенным в Тестовой Системе.
Тестовая Система не принимает параметров командрной строки. При запуске исполняемого
файла, последовательно запускаются все зарегестрированные тесты.
Результаты запуска выводятся в стандартный поток вывода и представляют из себя фрагмент XML (http://www.w3c.org/XML/ ) данных.
Если воспользоваться скриптом ./build/run_tests.bat (при этом текущей директорией должна быть ./build) то будет запущен файл ./bin/test.exe, результаты будут сохранены в ./status и могут быть просмотрены открытием файла ./status/test.log или ./status/test.err.log (содержат непосредственные результы запуска).