Во всех примерах методы регистрация тестов прописываются в классе
type TCalc=class private class Procedure _RegisterMethod; // Register TestMethods class Function _TestMethods( IMethod:IRunMethodParam // Test Methods ):TTestResultParam;// Result Test ...
Но методы регистрации можно прописывать в любом месте, в любом классе и даже без класса.
Например мы можем написать методы регистрации в другом классе TCalcTest:
Класс TCalcTest может быть как в исходном модуле, так и во внешнем.
type TCalcTest=class private class Procedure _RegisterMethod; // Register TestMethods class Function _TestMethods( IMethod:IRunMethodParam // Test Methods ):TTestResultParam;// Result Test ...
Можно сделать класс сборник для тестов различных многих классов:
type TTestCollections=class private // TCalc class Procedure TCalc_RegisterMethod; // Register TestMethods class Function TCalc_TestMethods( IMethod:IRunMethodParam ):TTestResultParam; // TFiles class Procedure TFiles_RegisterMethod; // Register TestMethods class Function TFiles_TestMethods( IMethod:IRunMethodParam ):TTestResultParam; // TBitmap class Procedure TBitmap_RegisterMethod; // Register TestMethods class Function TBitmap_TestMethods( IMethod:IRunMethodParam ):TTestResultParam;
Можно создавать методы тестов вне классов, немного изменив их описание
Procedure NoClass_RegisterMethod(Owner:TObject); // Register TestMethods Function NoClass_TestMethods(Owner:TObject;IMethod:IRunMethodParam):TTestResultParam;
и дописать код при регистрации
var rm:TTestRegisterMethod; tm:TTestMethodsRun; begin ... TMethod(rm).Code:=@NoClass_RegisterMethod; TMethod(tm).Code:=@NoClass_TestMethods; L_pIndex_NoClass := IRegisterClass(rm,tm,'TCalc_NoClassTest','No Test classed');
У Вас есть выбор, Вы можете делать как Вам удобно.
Но по своей практике тестирования (около 10 лет), я могу сказать, что хранить тесты в самом модуле и самом классе, самое правильное решение.
Когда у вас маленький проект, все наглядно.
Отдельные модули рабочего кода, отдельные модули для тестов, отдельные классы тестирования.
Вроде все просто и удобно.
Но когда проект становится большим с сотней рабочих модулей, появляются одновременно сотни тестовых модулей.
И с увеличением проекта увеличивается головная боль, по поддержке всех этих модулей.
И при многопользователькой работе, кто нибуть да забудет внести изменения в тестовый класс, особенно если используется грязный хак для доступа к данным .