Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,34 +48,61 @@
Возврат _Метод;
КонецФункции

// Параметры, используемые для запуска бенчмарков с разными наборами входных данных
// Наборы параметров, используемые для запуска бенчмарков с различными входными данными.
//
// Возвращаемое значение:
// Массив из Массив из ПараметрБенчмарка
Функция НаборыПараметров() Экспорт
Возврат Новый Массив(Новый ФиксированныйМассив(_НаборыПараметров));
КонецФункции

// Добавляет параметры в набор, позволяя запускать тесты с разными наборами входных данных
// Добавляет параметры для выполнения бенчмарка, позволяя запускать тесты с различными наборами входных данных.
//
// Параметры:
// Параметры - Произвольный, Массив из Произвольный
// Параметры - Массив из Произвольный - Параметры метода бенчмарка. Длина массива должна соответствовать
// количеству объявленных параметров метода.
// - Произвольный - Значение единственного параметра метода бенчмарка.
//
// Возвращаемое значение:
// ЭтотОбъект
Функция ДобавитьПараметры(Параметры) Экспорт

МассивПараметров = Новый Массив();
КоличествоТребуемыхПараметров = _ИменаПараметров.Количество();

Если КоличествоТребуемыхПараметров = 0 Тогда
ВызватьИсключение СтрШаблон(
"Метод бенчмарка <%1> не имеет объявленных параметров. Передача параметров невозможна.",
_Метод
);
КонецЕсли;

Если ТипЗнч(Параметры) = Тип("Массив") Тогда

Если Параметры.Количество() <> КоличествоТребуемыхПараметров Тогда
ВызватьИсключение СтрШаблон(
"Количество переданных параметров (%1) не соответствует ожидаемому количеству (%2) для метода бенчмарка <%3>.",
Параметры.Количество(),
КоличествоТребуемыхПараметров,
_Метод
);
КонецЕсли;

Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл
Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина);
МассивПараметров.Добавить(Параметр);
КонецЦикла;

Иначе

Если КоличествоТребуемыхПараметров > 1 Тогда
ВызватьИсключение СтрШаблон(
"Передача одиночного значения недопустима для метода бенчмарка <%1>, так как он ожидает %2 параметра(ов).",
_Метод,
КоличествоТребуемыхПараметров
);
КонецЕсли;

Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[0], Параметры, Истина);
МассивПараметров.Добавить(Параметр);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -720,11 +720,13 @@

Результат = Новый Массив();
ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров();
КоличествоПараметровМетода = ИменаПараметров.Количество();
КоличествоТребуемыхПараметров = ИменаПараметров.Количество();

Если Параметры.Количество() <> КоличествоПараметровМетода Тогда
Если Параметры.Количество() <> КоличествоТребуемыхПараметров Тогда
ВызватьИсключение СтрШаблон(
"Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <%1>",
"Количество переданных параметров (%1) не соответствует ожидаемому количеству (%2) для метода бенчмарка <%3>.",
Параметры.Количество(),
КоличествоТребуемыхПараметров,
ДескрипторБенчмарка.Метод()
);
КонецЕсли;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,25 +63,11 @@

Процедура ПрочитатьАннотациюПараметры(СвойстваМетода, ДескрипторБенчмарка)

КоличествоПараметров = СвойстваМетода.Параметры.Количество();

ТекстОшибкиКоличествоПараметровНеСовпадает = СтрШаблон(
"Количество переданных параметров должно совпадать количеству параметров метода бенчмарка '%1'",
ДескрипторБенчмарка.Метод()
);

Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваМетода, "Параметры");
ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров();
КоличествоПараметров = ИменаПараметров.Количество();

Для Каждого Аннотация Из Аннотации Цикл

Параметры = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение");

Ожидаем.Что(КоличествоПараметров, ТекстОшибкиКоличествоПараметровНеСовпадает).Равно(Параметры.Количество());

ДескрипторБенчмарка.ДобавитьПараметры(Параметры);

КонецЦикла;

КонецПроцедуры
Expand Down
114 changes: 109 additions & 5 deletions tests/ТестыБенчмарков.os
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,10 @@

КонецПроцедуры

#Область Параметры

&Тест
Процедура Тест_ПараметрыМетодаИзАннотаций() Экспорт
Процедура Тест_ПроверяетПараметрыМетодаЧерезАннотации() Экспорт

Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию();
Результат = Бенчмаркинг.Запустить(Тип("БенчмаркСПараметрамиМетода"), Конфигурация);
Expand All @@ -156,7 +158,7 @@
КонецПроцедуры

&Тест
Процедура Тест_ДолженПроверитьПараметрыМетодаИПоляИзАннотаций() Экспорт
Процедура Тест_ПроверяетЗапускСПараметрамиМетодаИПоляЧерезАннотации() Экспорт

Тип = Тип("БенчмаркСПараметрамиМетодаИПоля");

Expand All @@ -182,7 +184,7 @@
КонецПроцедуры

&Тест
Процедура Тест_УстановкаПараметровМетода() Экспорт
Процедура Тест_ПроверяетУстановкуПараметровМетода() Экспорт

Параметры1 = Новый Массив();
Параметры1.Добавить(50);
Expand Down Expand Up @@ -210,6 +212,108 @@

КонецПроцедуры

&Тест
Процедура Тест_ПроверяетОшибкуПередачиПараметровКогдаМетодИмеетМеньшеПараметров() Экспорт

// Подготовка
Тип = Тип("БенчмаркСПараметрамиМетода");

Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);

ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры();

ПараметрыБенчмарка = Новый Массив();
ПараметрыБенчмарка.Добавить(50);
ПараметрыБенчмарка.Добавить(150);
ПараметрыБенчмарка.Добавить(250);

ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(ПараметрыБенчмарка);

// Действие и Проверка
Ожидаем
.Что(Дескриптор)
.Метод("ДобавитьПараметры", ПараметрыМетода)
.ВыбрасываетИсключение("Количество переданных параметров (3) не соответствует ожидаемому количеству (2) для метода бенчмарка <Бенчмарк>.");

КонецПроцедуры

&Тест
Процедура Тест_ПроверяетОшибкуПередачиПараметровКогдаМетодИмеетБольшеПараметров() Экспорт

// Подготовка
Тип = Тип("БенчмаркСПараметрамиМетода");

Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);

ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры();

ПараметрыБенчмарка = Новый Массив();
ПараметрыБенчмарка.Добавить(50);

ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(ПараметрыБенчмарка);

// Действие и Проверка
Ожидаем
.Что(Дескриптор)
.Метод("ДобавитьПараметры", ПараметрыМетода)
.ВыбрасываетИсключение("Количество переданных параметров (1) не соответствует ожидаемому количеству (2) для метода бенчмарка <Бенчмарк>.");

КонецПроцедуры

&Тест
Процедура Тест_ПроверяетОшибкуПередачиПараметраКогдаМетодНеИмеетОбъявленныхПараметров() Экспорт

// Подготовка
Тип = Тип("ПустойБенчмарк");

Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);

ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры();

ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(100);

// Действие и Проверка
Ожидаем
.Что(Дескриптор)
.Метод("ДобавитьПараметры", ПараметрыМетода)
.ВыбрасываетИсключение("Метод бенчмарка <Бенчмарк> не имеет объявленных параметров. Передача параметров невозможна.");

КонецПроцедуры

&Тест
Процедура Тест_ПроверяетОшибкуПередачиОдиночногоПараметраКогдаМетодИмеетНесколькоПараметров() Экспорт

// Подготовка
Тип = Тип("БенчмаркСПараметрамиМетода");

Конфигурация = Новый КонфигурацияБенчмарков(Тип);
ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация);

ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип);
Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры();

ПараметрыМетода = Новый Массив();
ПараметрыМетода.Добавить(100);

// Действие и Проверка
Ожидаем
.Что(Дескриптор)
.Метод("ДобавитьПараметры", ПараметрыМетода)
.ВыбрасываетИсключение("Передача одиночного значения недопустима для метода бенчмарка <Бенчмарк>, так как он ожидает 2 параметра(ов).");

КонецПроцедуры

#КонецОбласти

&Тест
Процедура Тест_КатегорииИзАннотации() Экспорт

Expand Down Expand Up @@ -553,7 +657,7 @@
КонецПроцедуры

&Тест
Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииНесериализуемыхПараметров() Экспорт
Процедура Тест_ПроверяетОшибкуЗапускаПриНаличииНесериализуемыхПараметров() Экспорт

Тип = Тип("БенчмаркСПараметрамиПоля");

Expand Down Expand Up @@ -1108,7 +1212,7 @@
Ожидаем
.Что(Бенчмаркинг)
.Метод("Запустить", ПараметрыМетода)
.ВыбрасываетИсключение("Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <БенчмаркДваПараметра>");
.ВыбрасываетИсключение("Количество переданных параметров (1) не соответствует ожидаемому количеству (2) для метода бенчмарка <БенчмаркДваПараметра>.");

КонецПроцедуры

Expand Down
Loading