Unit-test
February 3, 2021

Unit-test Попытка №2

Проигнорирую предыдущие выводы и рассмотрю пример доработки системы НДС в тиражном продукте 1С:Бухгалтерия предприятие 3.0 и тестирование. В регистр накопления НДСРаздельныйУчет добавим новое измерение и доработаем движения приход для документа Поступление товаров и услуг.

Путем простейшего анализа получим, что приходное движение выполнятся в процедуре СформироватьДвиженияНДСРаздельныйУчетПоступлениеЦенностей общего модуля УчетНДСРаздельный.

Как можно видеть процедура примитивная и она оперирует готовыми структурами, которые ей передаются, как параметры.

Поэтому изменения вносим в функциюПодготовитьДанныеДвиженийНДСРаздельныйУчетПоступлениеЦенностей, дополняем нужными данными таблицу значений, которую возвращает функция.

Далее разрабатываем автоматизированный unit-тест, который проверит корректность измененной функции. Код теста размещаем во внешней обработке или расширении. Действие теста - вызов тестируемой процедуры или функции. В данном случае возможны 2 варианта:

Вызов измененной функции ПодготовитьДанныеДвиженийНДСРаздельныйУчет...

Достоинства: вызов полностью изолирован - проверяем то, что изменили, не затрагивая другой код. Функция возвращает структуру, которую легко сравнить с эталоном.

Недостатки: данная функция не экспортная, т.е. она вспомогательная и определяет "внутреннее" поведение модуля. Чтобы ее вызвать придется добавлять в общий модуль УчетНДСРаздельный свою экспортную функцию, к которой будет обращаться тест:

Функция Тест_ПодготовитьДанныеДвиженийНДСРаздельныйУчетПоступлениеЦенностей(ДанныеДвижений, Реквизиты) Экспорт 
	Возврат ПодготовитьДанныеДвиженийНДСРаздельныйУчетПоступлениеЦенностей(ДанныеДвижений, Реквизиты);
КонецФункции

Вызов процедуры СформироватьДвиженияНДСРаздельныйУчетПоступлениеЦенностей

Достоинства: процедура экспортная поэтому ее можно вызвать из кода теста.

Недостатки: один из параметров процедуры специальная коллекция Движения, поэтому в код теста нужно добавить ее создание.

Проверка результата может быть выполнена в двух вариантах:

Вариант 1. через запись документа и чтение записей регистра накопления НДСРаздельныйУчет

	Движения = Документ.Движения;
	УчетНДСРаздельный.СформироватьДвиженияНДСРаздельныйУчетПоступлениеЦенностей(ДанныеДвижений, Движения, Ложь);
	Документ.Записать(); 

Вариант 2. без записи документа, сравнить с эталоном набор записей регистра Движения.НДСРаздельныйУчет, который сформировался после вызова процедуры СформироватьДвиженияНДС...

В любом случае чтобы автоматизировать этот тест нужно выполнить большой объем подготовительной работы:

  1. создать необходимые справочники и документы, участвующие в тесте
  2. сериализовать и сохранить коллекции, которые передаются как параметры в функцию или процедуру ДанныеДвижений и Реквизиты
  3. сохранить эталонный результат

Чтобы сделать все выше перечисленное нужен вспомогательный инструментарий, который позволит выполнять эти действия, не перегружая код теста.

Используя такой инструментарий, код теста будет достаточно простым:

  1. восстановить коллекции-параметры
  2. получить результат вызова тестируемого кода
  3. сравнить результат с эталоном

За кадром остаются такие важные параметры как повторяемость теста и запуск его в другой базе. Такой тест не совсем unit-тест он больше относится категории интеграционных тестов.