Если вы пишете юнит-тесты, чтобы протестировать свой код, то, скорее всего, довольно часто сталкивались с необходимостью протестировать некоторую внутреннюю процедуру или функцию разрабатываемого модуля.
Первый способ, который сразу приходит в голову, - сделать тестируемый метод экспортным. Но мне этот способ не нравится по понятным причинам.
Вместо этого я использую другой способ. В тестируемый модуль достаточно добавить всего одну экспортную процедуру, через которую можно будет получить доступ ко всему модулю.
Процедура ВыполнитьВКонтексте(Команда, Параметр=Неопределено) Экспорт
Выполнить(Команда);
КонецПроцедуры
Вот и все.
Дальше разберем варианты использования этой процедуры. Предположим, что мы тестируем некоторый общий модуль МойОбщийМодуль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. Получение значения внутренней переменной модуля
При тестировании модуля документа или, например, обработки, можно установить/прочитать значение переменной.
Сделать это можно по аналогии с предыдущими пунктами