adimetrius писал(а):
Т.е. определение теста: это процедура типа PROCEDURE (VAR r: T.Rec), которая должным образом заполняет r?
Совершенно верно. Остальное - (в том числе и тестирующая) инфраструктура.
Например, из статического модуля OmtestOmcCompiler вызываются по очереди тесты компилятора.
Код:
PROCEDURE MAIN*;
VAR pl: INTEGER; st: Tester.State;
BEGIN
IF ~Runner.IntOpt("-pl", pl) THEN
pl := 1;
END;
Tester.Start(st, pl >= 3, pl >= 2, pl >= 1);
Tester.StartMod(st, "OmtestOmcSimpleTest");
Tester.RunFun(st, OmtestOmcSimpleTest.Test0Const, "Test0Const");
Tester.RunFun(st, OmtestOmcSimpleTest.Test1Mop, "Test1Mop");
Tester.RunFun(st, OmtestOmcSimpleTest.Test2Dop, "Test2Dop");
Tester.RunFun(st, OmtestOmcSimpleTest.Test3Vars, "Test3Vars");
Tester.RunFun(st, OmtestOmcSimpleTest.Test4Loop, "Test4Loop");
Tester.RunFun(st, OmtestOmcSimpleTest.Test5ShortLong, "Test5ShortLong");
Tester.RunFun(st, OmtestOmcSimpleTest.Test6Operations, "Test6Operations");
Tester.RunFun(st, OmtestOmcSimpleTest.Test7ComplexConversions, "Test7ComplexConversions");
Tester.RunFun(st, OmtestOmcSimpleTest.Test8Overflows, "Test8Overflows");
Tester.EndMod(st);
Опция -pl задает уровень печати.
Tester.RunFun(st, OmtestOmcSimpleTest.Test0Const, "Test0Const") - прокручивает функцию теста необходимое число раз до завершения. И так по всем функциям.
Tester.EndMod(st) - печатает статистику по пройденным тестам модуля.
Данная реализация не использует рефлексию и не использует динамическую загрузку.
Вызов тестов через рефлексию по алфавиту Test* осуществляется посредством Tester.Run (VAR st: State; IN mname: ARRAY OF CHAR). Он используется в om?sh test modules.