Предыдущая серия была тут - Кодогенерация. Вынесем конкретную модель и конкретные шаблоны во внешние словари.
Теперь отвлечёмся от кодогенерации и немножко поговорим о тестах.
Была тут мысль - ToDo. Сделать тесты к скриптовым словам.
Теперь эта мысль оформилась.
Попробую рассказать как.
Вот есть словарь функций:
string.ms.dict
И тесты к нему:
String.ms.script
И вывод тестов:
Функции более-менее протестированы.
Покрываются разные условные участки.
Уже конечно неплохо, но пойдём дальше.
Но ведь можно тесты засунуть "внутрь" функций и запускать их извне. Автоматом.
Дальше постараюсь рассказать как.
Теперь отвлечёмся от кодогенерации и немножко поговорим о тестах.
Была тут мысль - ToDo. Сделать тесты к скриптовым словам.
Теперь эта мысль оформилась.
Попробую рассказать как.
Вот есть словарь функций:
string.ms.dict
USES Documentation.ms.dict params.ms.dict core.ms.dict map.ms.dict ; : (string) ^ IN aValue aValue DO ToPrintable ; // (string) STRING FUNCTION string:CatWihAny STRING IN aString IN aValue aString aValue ToPrintable Cat =: Result ; // string:CatWihAny STRING FUNCTION any:Cat ARRAY IN anArray anArray .map> ToPrintable strings:Cat =: Result ; // any:Cat STRING FUNCTION (+)? STRING in aPrefix STRING right aSuffix %SUMMARY 'Если aSuffix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ; Result := '' STRING VAR l_Suffix aSuffix =: l_Suffix if ( l_Suffix =/= '' ) then ( aPrefix l_Suffix Cat =: Result ) ; // (+)? STRING FUNCTION ?(+) STRING in aPrefix STRING right aSuffix %SUMMARY 'Если aPrefix не пустой, то возвращает сумму aPrefix и aSuffix, иначе возвращает пустую строку' ; Result := '' if ( aPrefix =/= '' ) then ( aPrefix aSuffix Cat =: Result ) ; // ?(+) STRING FUNCTION strings:CatSep> STRING right aSep ARRAY right aValues aValues aSep strings:CatSep =: Result ; // strings:CatSep> WordAlias CatSep> strings:CatSep>
И тесты к нему:
String.ms.script
USES string.ms.dict ; '' (+)? 'B' Print 'A' (+)? 'B' Print 'A' (+)? '' Print '------------------' Print '' ?(+) 'B' Print 'A' ?(+) 'B' Print 'A' ?(+) '' Print '------------------' Print strings:CatSep> ' ' [ 'A' 'B' ] Print strings:CatSep> ' ' [ 'A ' 'B' ] Print strings:CatSep> ' ' [ 'A ' ' B' ] Print strings:CatSep> ' ' [ 'A' ' B' ] Print strings:CatSep> ' ' [ '' 'B' ] Print strings:CatSep> ' ' [ 'A' '' ] Print '------------------' Print [ 'A' 123 'B' ] any:Cat Print '------------------' Print
И вывод тестов:
B AB ------------------ AB A ------------------ A B A B A B A B B A ------------------ A123B ------------------
Функции более-менее протестированы.
Покрываются разные условные участки.
Уже конечно неплохо, но пойдём дальше.
Но ведь можно тесты засунуть "внутрь" функций и запускать их извне. Автоматом.
Дальше постараюсь рассказать как.
Комментариев нет:
Отправить комментарий