Содержание материала

Тестирование осуществляется следующим образом — программист (т.е. я) после написания кода, требующего тестирования, создает из этого кода dllшку из которой экспортируются все подлежащие тестированию функции. Делается это с помощью набора макросов (файл testin_utilities.h).

BEGIN_TESTING_SECTION() - открытие секции экспортируемых функций
END_TESTING_SECTION() - закрытие секции экспортируемых функций

FUNCTION_TESTING_1( FUNCTION_NAME , EXPORT_FUNCTION_ALIAS , PARAM_1_TYPE , FUNCTION_RET_RYPE , ALIAS_RET_TYPE ) - макрос создает экспортируемую функцию с именем EXPORT_FUNCTION_ALIAS у которой один параметр типа PARAM_1_TYPE. По сути, этот макрос создает просто обертку для функции с именем FUNCTION_NAME, которую и нужно протестировать. Аналогичных макросов наделано для функций с 0, 2 и 3 параметрами (пока больше не надо было).
FUNCTION_RET_RYPE – это тип значения, возвращаемого функцией FUNCTION_NAME.
ALIAS_RET_TYPE – это тип значения, возвращаемого экспортируемой функцией. Вообще говоря эти типы могут отличаться. Если преполагается, что экспортируемая функция не будет ничего возвращать, то в качестве этого параметра должно быть передано NO_RET. Однако эти макросы не позволяют экспортировать функции-члены каких-либо классов, хотя они так же требуют тестирования. Чтобы это сделать нужно выполнить предварительные настройки следующим макросом:

ENABLE_CLASS_TESTING( CLASS_NAME ) - где CLASS_NAME есть имя класса, требующего тестирования. Этот макрос создаст мэнэджер именованых объектов (см. файл object_manager.h) класса CLASS_NAME + функцию void CreateObject( const char * ObjectName ) для создания именованных объектов внутри этого мэнэджера. Эта функция также является экспортируемой. Вот собственно и все, вызов методов класса осуществляется похожими на макросами FUNCTION_TESTING_[0123]:
CLASS_MEMBER_FUNCTION_TESTING_1 — в этот макрос первым параметром передается имя класса, чей метод мы тестируем. Макрос создает экспортируемую функцию-враппер, которая помимо параметров тестируемой функции принимает название объекта, посредством которого будет осуществляться вызов функции-члена. Параметры макроса практически аналогичны параметрам макросов FUNCTION_TESTING_[0123]. Единственное отличие заключается в том что первым параметром дополнительно передается имя класса, чей метод будет тестироваться. Однако такой механизм не позволит тестировать закрытые функции-члены. Чтобы обойти это, нужно сделать экспортируемую функцию другом класса. Делается это с помощью макросов SET_FRIENDSHIP_[0123] в объявлении класса.

Добавить комментарий


Защитный код
Обновить