TestMeType.pas

Модуль описывающий интерфейсы тестирования TestCode

Type - Типы

TTestResultParam - Код возврата тестирования

type
 TTestResultParam=(
    // Выполнения теста
              trNone      = 0  //  теста не было
             ,trOk        = 3  // Тест пройден
             ,trBreakTest = 10 // Прерывание теста по команде
             ,trError     = 13 // Ошибка, тест не пройден
             ,trException = 16 // Во время работы было исключение
 
    // Ошибки регистрации
             ,trErrParamCount = 30 // Ошибка в количестве параметров
             ,trErrParamType  = 31 // Ошибка в типе параметра (число,строка)
 
             );

TTypeDataStore - Сохраненный тип данных

Без комментариев

type
 TTypeDataStore = (
  tdsInteger    = 0   ,
  tdsBoolean    = 1   ,
  tdsAnsiChar   = 2   ,
  tdsExtended   = 3   ,
  tdsString     = 4   ,
  tdsPointer    = 5   ,
  tdsPAnsiChar  = 6   ,
  tdsObject     = 7   ,
  tdsClass      = 8   ,
  tdsWideChar   = 9   ,
  tdsPWideChar  = 10  ,
  tdsAnsiString = 11  ,
  tdsCurrency   = 12  ,
  tdsVariant    = 13  ,
  tdsInterface  = 14  ,
  tdsWideString = 15  ,
  tdsInt64      = 16  ,
  tdsUnicodeString = 17,
  tdsNone      = 99
  );

TMethodAddParam - типы добавления параметров тестирования

 TMethodAddParam = ( pAddManualOnly    = 0 // Ручное добавление
                    ,pAddOneEmptyParam = 1 // Без параметров, добавить пустой параметр автоматически
                     );

TLevelTestRunSet - уровни/группы тестирования модулей

TLevelTestRunSet = set of TLevelTestRun;

TLevelTestRun описан в TestMeLevelType.pas

TParamCheckOption - опции автоматической проверки параметров

   TParamCheckOption = (poCountParam  // проверять количество параметров
                       ,poTypeParam   // проверять тип параметров
                ,poHardCheckTypeParam // Жесткий тип проверки параметров byte/word/int64
                  );
  TParamCheckOptions = set of TParamCheckOption;

Интерфейсы

IRegisterTestCode - Интерфейс регистрации моделей, классов, методов для тестирования

    IRegisterTestCode=interface
    ['{F74FEF67-4EBA-4182-9C42-3580B19BDF61}']
    // регистрация уровня/группы модулей для тестирования
    Procedure IRegisterLevelTest(vLevelTest:variant;sNameTest,sDescription:WideString);
    // регистрация имени приложения которое будем тестировать
    Procedure  IRegisterApplication(sNameApp,sDescription:WideString;procNeedDisableUnit:TBoolFunction=nil);
    // регистрация модуля который будем тестировать
    Function IRegisterUnit(vLevelTest:variant; // уровень/группа для тестирования
              sNameUnit     // название модуля
             ,sDescription  // комментарий
                  :WideString
              ;procNeedDisableUnit:TBoolFunction=nil  // ссылка на функцию, если необходимо райнтайм отключение модуля из теста
              ;iSortPrioritet:integer=100 // установить порядковый номер для теста.
              ):TPIndexValue;// возвращает ссылку на зарегистрированный номер юнита
      // Регистрация класса который будем тестировать
      Function IRegisterClass(RegMethod:TTestRegisterMethod // метод в котором будет регистрация параметров для теста
              ;TestMethodRun:TTestMethodsRun  // метод в котором будет тестирование класса
              ;sClassName:WideString          // название класса
              ;sDescription:WideString=''     // комментаний к классу
              ;procNeedDisableUnit:TBoolFunction=nil //ссылка на функцию, если необходимо райнтайм отключение модуля из теста
              ;iSortPrioritet:integer=100 // установить порядковый номер для теста.
              ):TPIndexValue;// возвращает ссылку на зарегистрированный номер класса
 
      // удалить зарегистрированный класс из тестирования
      function  IUnRegisterClassInterface(pIndUnit,pIndClass:TPIndexValue):Boolean;
      // устаревшее, зарегистрировать списком методы
      Function IRegisterMethodList(const ArrNames
         ;sNames:WideString=''
         ;sDescription:WideString=''
         ;chSeparator:WideChar=','
         ;iSortPrioritet:integer=100
         ):boolean;
    // регистрация метода для тестирования
    Function IRegisterMethod(vENumMethodName:variant  // описанный метод который мы будем тестировать
                             ;sNamesMethod:WideString // название метода
                             ;sDesc:WideString=''     // комментарий
                             ;tAddParam:TMethodAddParam=pAddManualOnly //принцип добавление параметров, по умолчанию ручной
                             ;iSortPrioritet:integer=100 //установить порядковый номер для теста.
                             ;tParamCheckOptions:TParamCheckOptions=[poCountParam,poTypeParam] // опции автопроверки параметров
                             ;ttTestType:TTestType=tTestCodeOnly // тестируем только код
                             ;pIndexClass_NilDefault:TPIndexValue=nil // указатель на класс
                             ;pIndexUnit_NilDefault:TPIndexValue=nil  // указатель на модуль
                            ):TPIndexValue; //возвращает ссылку на зарегистрированный номер параметра
    // регистрация параметров для тестирования метода
    Function IRegisterMethodParams(
                      arrParams        // массив параметров для теста
                       ,arrResultCMP   // массив для проверки результатов тестирования
                        :array of const;
                       sName:WideString // описание параметров
                       ;ErrCode_Ok:TTestResultParam=trOk  // при каком коде возврата будет считаться, что тест пройден.
                        ;bIsAutoConvertParam:boolean=True // разрешена ли автоконвертация совместимых параметров
                        ;iTimeOutMS:Integer=5000 //время в миллисекундах, за которое тест должен быть пройден
                        ;iCountRun:Integer=1     // количество проходов
                       ;ttTestType:TTestType=tTestCodeOnly  // тип тестирования
 
                       ;sReserveStrParam:WideString='' // резерв
                       ;pIndMethod:TPIndexValue=nil    // ссылка на номер метода
                       ):boolean;
    // установить текущими юнит и класс, для тестирования
    Function ISetDefaultIndUnitClass(pIndUnit,pIndClass:TPIndexValue):boolean;
 
    end;

IResultValue - Интерфейс возвращаемых значений параметров

Без комментариев

type
    IResultValue=interface
      ['{999297E2-97B4-4CA8-9FD1-8358C184D84E}']
      Function AsInteger:Integer;
      Function AsBoolean:boolean;
      Function AsPointer:Pointer;
      Function AsObject:TObject;
      Function AsClass:TClass;
      Function AsExtended:Extended;
      Function AsAnsiChar:AnsiChar;
      Function AsPAnsiChar:PAnsiChar;
      Function AsAnsiString:AnsiString;
      Function AsCurrency:currency;
      Function AsVariant:Variant;
      Function AsInterface:IInterface;
      Function AsInt64:int64;
 
      Function AsDateTime:TDateTime;
 
      Function AsWideChar:WideChar;
      Function AsWideString:WideString;
      Function AsPWideChar:PWideChar;
 
      Function AsType:TTypeDataStore;
      Function IsCompareType(tType:TTypeDataStore):boolean; //Проверка на совместимость типов
 
    //  Function AsUnicodeString:UnicodeString; //Тип сохранения
 
    end;

IRunMethodParam - интерфейс параметров для тестирования кода

type
    IRunMethodParam=interface
     ['{2FF6D5C8-F137-46F0-8A88-FD4BD2C2F93A}']
      function GetAutoConvertParam: Boolean; //
      procedure SetAutoConvertParam(const Value: Boolean);
 
     function IGetNumParamUser:integer; // кол-во параметров записанные в вызове, для проверки в ф-ии тестирования
     function IReg_CodeResult_Ok:TTestResultParam; //При каком коде возврата тест будет считаться пройден
 
     function IGetArrParamCount:integer; // количество элементов для выполнения теста
     function IGetArrParam(iIndexValue:integer):IResultValue; // получить элемент значения для выполнения теста
     function IGetArrResultForTestMethodCount:integer; // количество элементов для сверки результата теста
     function IGetArrResultForTestMethod(iIndexValue:integer):IResultValue; // получить эталон значения для выполнения теста
     function IGetCountRunStep:Integer; // текущий номер повторения выполнения кода
     function IGetCountRun:Integer; // возвращает сколько будет повторений выполнения кода
     function IGetMaxTimeOut:Integer; // Максимальное время в миллисекундах выполнение больше которого будет считаться ошибкой
 
       function INeedBreakTest:boolean; // Возвращает True если необходимо прервать выполнение теста
 
     // производить автоконвертирование совместимых типов или нет?
       property IAutoConvertParam:Boolean read GetAutoConvertParam write SetAutoConvertParam  ;
 
    // Зарезервиорванные интерфейсы
       Function IReserveInterface1:IInterface;
       Function IReserveInterface2:IInterface;
       Function IReserveInterface3:IInterface;
       Function IReserveInterface4:IInterface;
       Function IReserveInterface5:IInterface;
       Function IReserveInterface6:IInterface;
    end;

Record

TRecITestMe - рекорд доступа к интерфейсам тестирования

 type
  PTRecITestMe=^TRecITestMe;
  TRecITestMe=record
    bIsTestCode:Boolean;
    ITestCode:IRegisterTestCode;
    bIsLicence:Boolean;
  end;

Функции

GetTestMe - Получение ссылки на интерфейсы для тестирования

Function GetTestMe:PTRecITestMe;