Для тестирования данных с помощью макетов-образцов в продукте есть утверждения
ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям
ПроверитьРавенствоТаблиц
- исходные данные (образец, таблица значений и т.п.) заранее сохраняются в макет (можно через ЗначениеВСтрокуВнутр, можно через преобразование в табличный документ или любым другим способом)
- в начале кода теста из макета получаем исходную таблицу данных
- выполняется основной код, получается таблица данных
- далее обе таблицы просто сравниваются указанными утверждениями
- все :)
Пример кода сравнения с образцом (из Пример теста СКД и отчета, сделанного на компоновке)
Перем КонтекстЯдра;
Перем Утверждения;
Перем ГенераторТестовыхДанных;
Перем УтвержденияПроверкаТаблиц;
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонтекстЯдра = КонтекстЯдраПараметр;
Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения");
ГенераторТестовыхДанных = КонтекстЯдра.Плагин("СериализаторMXL");
УтвержденияПроверкаТаблиц = КонтекстЯдра.Плагин("УтвержденияПроверкаТаблиц");
КонецПроцедуры
Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
НаборТестов.Добавить("Тест_ПроверитьОтчетНаСоответствиеЭталону");
КонецПроцедуры
Процедура Тест_ПроверитьОтчетНаСоответствиеЭталону() Экспорт
Перем Расшифровка; // сюда будет передана информация расшифровки СКД, т.к. в эталоне она тоже есть
// создание тестовых данных из табличного документа
МакетТестовыеДанные = ПолучитьМакет("ТестовыеДанные");
ТестовыеДанные = ГенераторТестовыхДанных.СоздатьДанныеПоТабличномуДокументу(МакетТестовыеДанные);
Утверждения.ПроверитьБольше(ТестовыеДанные.Количество(), 0, "Ожидали, что загрузка макета загрузит данные больше 0");
// Получение эталонного отчета
// Важно эталон получать именно так из-за плясок с кодом языка макета
МакетЭталона = ПолучитьМакет("Эталон");
Эталон = Новый ТабличныйДокумент;
Эталон.Вывести(МакетЭталона);
// Формирование отчета
РезультатОтчета = Новый ТабличныйДокумент;
Отчет = Отчеты.ТестовыйОтчетСКДДляСравнениеСЭталоном.Создать();
Отчет.СкомпоноватьРезультат(РезультатОтчета, Расшифровка);
#Если НЕ (ТолстыйКлиентОбычноеПриложение или ТолстыйКлиентУправляемоеПриложение) Тогда
УтвержденияПроверкаТаблиц.ПроверитьРавенствоТабличныхДокументовТолькоПоЗначениям(Эталон, РезультатОтчета, "Ожидали, что эталон (слева) совпадет с результатом (справа), а они различны!");
#Иначе
// Сохранение в файлы mxl
ИмяФайлаЭталона = ПолучитьИмяВременногоФайла("mxl");
ИмяФайлаРезультатаОтчета = ПолучитьИмяВременногоФайла("mxl");
Эталон.Записать(ИмяФайлаЭталона);
РезультатОтчета.Записать(ИмяФайлаРезультатаОтчета);
// Сравнение файлов
// Если Истина, то будет показано окно демонстрации различий, если файлы различны
// Использовать только для расследования ошибки, если тест падает на сравнении
ПоказатьРазличия = Истина;
// ПараметрыСравнения заполняется по необходимости. Если не заполнены, то используются значения по умолчанию платформы
// Если не указан способ сравнения, будет попытка определить автоматически по расширению файла:
// mxl - ТабличныйДокумент
// txt,xml - ТекстовыйДокумент
ПараметрыСравнения = Новый Структура;
//ПараметрыСравнения.Вставить("ИгнорироватьПустоеПространство", Истина);
//ПараметрыСравнения.Вставить("УчитыватьРазделителиСтрок", Ложь);
//ПараметрыСравнения.Вставить("УчитыватьРегистр", Ложь);
//ПараметрыСравнения.Вставить("СпособСравнения", СпособСравненияФайлов.ТекстовыйДокумент);
Утверждения.ПроверитьРавенствоФайлов(ИмяФайлаЭталона, ИмяФайлаРезультатаОтчета,
"Ожидали, что результат отчета соответствует эталону", ПараметрыСравнения, ПоказатьРазличия);
#КонецЕсли
КонецПроцедуры