Каталог решений - Как протестировать неэкспортные процедуры модулей

Как протестировать неэкспортные процедуры модулей

Как протестировать неэкспортные процедуры модулей

В наличии

Процедура для доступа к внутренним методам модуля без нарушения инкапсуляции.

Категория:

Описание

Если вы пишете юнит-тесты, чтобы протестировать свой код, то, скорее всего, довольно часто сталкивались с необходимостью протестировать некоторую внутреннюю процедуру или функцию разрабатываемого модуля.

Первый способ, который сразу приходит в голову, — сделать тестируемый метод экспортным. Но мне этот способ не нравится по понятным причинам.

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

Процедура ВыполнитьВКонтексте(Команда, Параметр=Неопределено) Экспорт
	Выполнить(Команда);
КонецПроцедуры

Вот и все.

Дальше разберем варианты использования этой процедуры. Предположим, что мы тестируем некоторый общий модуль МойОбщийМодуль1

 

1. Вызов процедуры без параметров.

Пусть в тестируемом модуле есть процедура 

Процедура МояПроцедура0()
КонецПроцедуры

Вызов этой процедуры извне будет выглядеть так:

МойОбщийМодуль1.ВыполнитьВКонтексте("МояПроцедура0()");

 

2. Вызов процедуры с одним параметром

Пусть в тестируемом модуле есть процедура 

Процедура МояПроцедура1(ВходнойПараметр)
КонецПроцедуры

Вызов этой процедуры извне будет выглядеть так:

ЗначениеПараметра = "Некоторое_значение";
МойОбщийМодуль1.ВыполнитьВКонтексте("МояПроцедура1(Параметр)", ЗначениеПараметра);

 

3. Вызов процедуры с несколькими параметрами

Пусть в тестируемом модуле есть процедура 

Процедура МояПроцедура2(ВходнойПараметр1, ВходнойПараметр2)
КонецПроцедуры

Вызов этой процедуры извне будет выглядеть так:

МассивПараметров = Новый Массив;
МассивПараметров.Добавить("Некоторое_значение1");
МассивПараметров.Добавить("Некоторое_значение2");
МойОбщийМодуль1.ВыполнитьВКонтексте("МояПроцедура2(Параметр[0], Параметр[1])", МассивПараметров);

Вместо массива в этом варианте можно использовать структуру

 

4. Вызов функции без параметров

Пусть из тестируемого модуля нужно получить результат функции

Функция МояФункция0()
КонецФункции

Вызов этой функции извне будет выглядеть так

РезультатФункции = Неопределено; // сначала объявим переменную, в которую будем возвращать значение
МойОбщийМодуль1.ВыполнитьВКонтексте("Параметр = МояФункция0()",РезультатФункции);

 

5. Вызов функции с параметрами

Пусть из тестируемого модуля нужно получить результат функции с параметрами

Функция МояФункция1(ВходнойПараметр)
КонецФункции

Вызов этой функции извне может выглядеть так

ПараметрФункции = "Передаваемый_параметр";
МойОбщийМодуль1.ВыполнитьВКонтексте("Параметр = МояФункция1(Параметр)",ПараметрФункции);
РезультатФункции = ПараметрФункции;

 

6. Получение значения внутренней переменной модуля

При тестировании модуля документа или, например, обработки, можно установить/прочитать значение переменной.

Сделать это можно по аналогии с предыдущими пунктами

has been added to your cart:
Оформление заказа