Здесь вы научитесь как правильно тестировать методы.
Итоговый тест приложения (видео)
-
Установить DEFINE в опциях проекта.
Определите в опциях «Conditionals Define» - TESTME для тестирования и удалите когда захотите отключить код тестирования в приложении.
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs {$IFDEF TESTME} ,TestMe,TestMe_Types ,TestCodeType, TestCodeLevelUnits {$ENDIF} ;
type Tfrm_Calc = class (TForm ) {$IFDEF TESTME} private class var F_pIndexClass:TPIndexValue; class Procedure _RegisterMethod; class Function _TestMethods( IMethod:IRunMethodParam):TTestResultParam; {$ENDIF} public
public Function Divide(iA,iB:integer):integer; .... function TForm1.Divide(iA, iB: integer): integer; begin result:=iA div iB; end;
1. Ограничим блок DEFINE для тестирования
2. Опишем методы которые будем тестировать, полное описание в пунктах 4 и 5.
{$IFDEF TESTME} type TTestMethod = (tmDiv); class procedure Tfrm_Calc._RegisterMethod; begin end; class function Tfrm_Calc._TestMethods(IMethod: IRunMethodParam): TTestResultParam; begin end;
3. Зарегистрируем модуль который будем тестировать в блоке initialization
initialization if GetTestMe.bIsTestCode then begin with GetTestMe.ITestCode do begin TForm1.F_pIndexClass := IRegisterClass(TForm1._RegisterMethod,TForm1._TestMethods,'TForm1','Test many reg methods'); end; end; {$ENDIF} end.
4. Зарегистрируем методы которые будем тестировать в процедуре _RegisterMethod.
class procedure TCalc._RegisterMethod; begin if not GetTestMe.bIsTestCode then Exit; with GetTestMe.ITestCode do begin if not ISetDefaultIndClassUnitApp(F_pIndexClass) then exit; // Set position IRegisterMethod(tmDiv ,'tmDiv' ,'Test Div operation');// Test methods IRegisterMethodParams([15,5],[3],'15 div 5=3'); // True result IRegisterMethodParams([2,2],[1],'2 div 2=1'); // True result IRegisterMethodParams([4,4],[4],'4 div 4<>4 True=Error'); // Error IRegisterMethodParams([4,4],[4],'4 div 4=4 trError it''s Ok',trError); // Error = Ok IRegisterMethodParams([4,0],[4],'4 div 0 (!) Exception'); // Exception IRegisterMethodParams([4,0],[4],'4 div 0 (!) trException it''s Ok',trException); // Exception = Ok end; //withend; end;
Видео с кратким описанием:
5. Кодируем сам тест в функции _TestMethods.
class function TCalc._TestMethods( IMethod: IRunMethodParam): TTestResultParam; begin case TTestMethod(IMethod.IGetNumParamUser) of tmDiv: begin if (Form1.divide(IMethod.IGetArrParam(0).AsInteger,IMethod.IGetArrParam(1).AsInteger) = IMethod.IGetArrResultForTestMethod(0).AsInteger) then result:=trOk else result:=trError; end; end; // case end;
Итоговый тест приложения (видео)