diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" index e3af0d1..b2280d6 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\260.os" @@ -48,7 +48,7 @@ Возврат _Метод; КонецФункции -// Параметры, используемые для запуска бенчмарков с разными наборами входных данных +// Наборы параметров, используемые для запуска бенчмарков с различными входными данными. // // Возвращаемое значение: // Массив из Массив из ПараметрБенчмарка @@ -56,19 +56,38 @@ Возврат Новый Массив(Новый ФиксированныйМассив(_НаборыПараметров)); КонецФункции -// Добавляет параметры в набор, позволяя запускать тесты с разными наборами входных данных +// Добавляет параметры для выполнения бенчмарка, позволяя запускать тесты с различными наборами входных данных. // // Параметры: -// Параметры - Произвольный, Массив из Произвольный +// Параметры - Массив из Произвольный - Параметры метода бенчмарка. Длина массива должна соответствовать +// количеству объявленных параметров метода. +// - Произвольный - Значение единственного параметра метода бенчмарка. // // Возвращаемое значение: // ЭтотОбъект Функция ДобавитьПараметры(Параметры) Экспорт МассивПараметров = Новый Массив(); + КоличествоТребуемыхПараметров = _ИменаПараметров.Количество(); + + Если КоличествоТребуемыхПараметров = 0 Тогда + ВызватьИсключение СтрШаблон( + "Метод бенчмарка <%1> не имеет объявленных параметров. Передача параметров невозможна.", + _Метод + ); + КонецЕсли; Если ТипЗнч(Параметры) = Тип("Массив") Тогда + Если Параметры.Количество() <> КоличествоТребуемыхПараметров Тогда + ВызватьИсключение СтрШаблон( + "Количество переданных параметров (%1) не соответствует ожидаемому количеству (%2) для метода бенчмарка <%3>.", + Параметры.Количество(), + КоличествоТребуемыхПараметров, + _Метод + ); + КонецЕсли; + Для ИндексПараметра = 0 По Параметры.ВГраница() Цикл Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[ИндексПараметра], Параметры[ИндексПараметра], Истина); МассивПараметров.Добавить(Параметр); @@ -76,6 +95,14 @@ Иначе + Если КоличествоТребуемыхПараметров > 1 Тогда + ВызватьИсключение СтрШаблон( + "Передача одиночного значения недопустима для метода бенчмарка <%1>, так как он ожидает %2 параметра(ов).", + _Метод, + КоличествоТребуемыхПараметров + ); + КонецЕсли; + Параметр = Новый ПараметрБенчмарка(_ИменаПараметров[0], Параметры, Истина); МассивПараметров.Добавить(Параметр); diff --git "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 87b227f..c770a46 100644 --- "a/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\232\320\273\320\260\321\201\321\201\321\213/\320\227\320\260\320\277\321\203\321\201\320\272\320\260\321\202\320\265\320\273\321\214\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -720,11 +720,13 @@ Результат = Новый Массив(); ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметровМетода = ИменаПараметров.Количество(); + КоличествоТребуемыхПараметров = ИменаПараметров.Количество(); - Если Параметры.Количество() <> КоличествоПараметровМетода Тогда + Если Параметры.Количество() <> КоличествоТребуемыхПараметров Тогда ВызватьИсключение СтрШаблон( - "Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <%1>", + "Количество переданных параметров (%1) не соответствует ожидаемому количеству (%2) для метода бенчмарка <%3>.", + Параметры.Количество(), + КоличествоТребуемыхПараметров, ДескрипторБенчмарка.Метод() ); КонецЕсли; diff --git "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index d7a5134..a96b3d2 100644 --- "a/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/src/BenchmarkOneScript/core/\320\234\320\276\320\264\321\203\320\273\320\270/\320\230\320\267\320\262\320\273\320\265\320\272\320\260\321\202\320\265\320\273\321\214\320\224\320\265\321\201\320\272\321\200\320\270\320\277\321\202\320\276\321\200\320\276\320\262\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -63,25 +63,11 @@ Процедура ПрочитатьАннотациюПараметры(СвойстваМетода, ДескрипторБенчмарка) - КоличествоПараметров = СвойстваМетода.Параметры.Количество(); - - ТекстОшибкиКоличествоПараметровНеСовпадает = СтрШаблон( - "Количество переданных параметров должно совпадать количеству параметров метода бенчмарка '%1'", - ДескрипторБенчмарка.Метод() - ); - Аннотации = РаботаСАннотациями.ПолучитьАннотации(СвойстваМетода, "Параметры"); - ИменаПараметров = ДескрипторБенчмарка.ИменаПараметров(); - КоличествоПараметров = ИменаПараметров.Количество(); Для Каждого Аннотация Из Аннотации Цикл - Параметры = РаботаСАннотациями.ПолучитьЗначенияПараметровАннотации(Аннотация, "Значение"); - - Ожидаем.Что(КоличествоПараметров, ТекстОшибкиКоличествоПараметровНеСовпадает).Равно(Параметры.Количество()); - ДескрипторБенчмарка.ДобавитьПараметры(Параметры); - КонецЦикла; КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" index 25eb804..b0c4ab2 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213\320\221\320\265\320\275\321\207\320\274\320\260\321\200\320\272\320\276\320\262.os" @@ -139,8 +139,10 @@ КонецПроцедуры +#Область Параметры + &Тест -Процедура Тест_ПараметрыМетодаИзАннотаций() Экспорт +Процедура Тест_ПроверяетПараметрыМетодаЧерезАннотации() Экспорт Конфигурация = ТестированиеБенчмарков.КонфигурацияПоУмолчанию(); Результат = Бенчмаркинг.Запустить(Тип("БенчмаркСПараметрамиМетода"), Конфигурация); @@ -156,7 +158,7 @@ КонецПроцедуры &Тест -Процедура Тест_ДолженПроверитьПараметрыМетодаИПоляИзАннотаций() Экспорт +Процедура Тест_ПроверяетЗапускСПараметрамиМетодаИПоляЧерезАннотации() Экспорт Тип = Тип("БенчмаркСПараметрамиМетодаИПоля"); @@ -182,7 +184,7 @@ КонецПроцедуры &Тест -Процедура Тест_УстановкаПараметровМетода() Экспорт +Процедура Тест_ПроверяетУстановкуПараметровМетода() Экспорт Параметры1 = Новый Массив(); Параметры1.Добавить(50); @@ -210,6 +212,108 @@ КонецПроцедуры +&Тест +Процедура Тест_ПроверяетОшибкуПередачиПараметровКогдаМетодИмеетМеньшеПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСПараметрамиМетода"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры(); + + ПараметрыБенчмарка = Новый Массив(); + ПараметрыБенчмарка.Добавить(50); + ПараметрыБенчмарка.Добавить(150); + ПараметрыБенчмарка.Добавить(250); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(ПараметрыБенчмарка); + + // Действие и Проверка + Ожидаем + .Что(Дескриптор) + .Метод("ДобавитьПараметры", ПараметрыМетода) + .ВыбрасываетИсключение("Количество переданных параметров (3) не соответствует ожидаемому количеству (2) для метода бенчмарка <Бенчмарк>."); + +КонецПроцедуры + +&Тест +Процедура Тест_ПроверяетОшибкуПередачиПараметровКогдаМетодИмеетБольшеПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСПараметрамиМетода"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры(); + + ПараметрыБенчмарка = Новый Массив(); + ПараметрыБенчмарка.Добавить(50); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(ПараметрыБенчмарка); + + // Действие и Проверка + Ожидаем + .Что(Дескриптор) + .Метод("ДобавитьПараметры", ПараметрыМетода) + .ВыбрасываетИсключение("Количество переданных параметров (1) не соответствует ожидаемому количеству (2) для метода бенчмарка <Бенчмарк>."); + +КонецПроцедуры + +&Тест +Процедура Тест_ПроверяетОшибкуПередачиПараметраКогдаМетодНеИмеетОбъявленныхПараметров() Экспорт + + // Подготовка + Тип = Тип("ПустойБенчмарк"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры(); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(100); + + // Действие и Проверка + Ожидаем + .Что(Дескриптор) + .Метод("ДобавитьПараметры", ПараметрыМетода) + .ВыбрасываетИсключение("Метод бенчмарка <Бенчмарк> не имеет объявленных параметров. Передача параметров невозможна."); + +КонецПроцедуры + +&Тест +Процедура Тест_ПроверяетОшибкуПередачиОдиночногоПараметраКогдаМетодИмеетНесколькоПараметров() Экспорт + + // Подготовка + Тип = Тип("БенчмаркСПараметрамиМетода"); + + Конфигурация = Новый КонфигурацияБенчмарков(Тип); + ТестированиеБенчмарков.НастроитьКонфигурациюПодТесты(Конфигурация); + + ДескрипторыБенчмарков = Новый КоллекцияДескрипторовБенчмарков(Тип); + Дескриптор = ДескрипторыБенчмарков.НайтиПоИмени("Бенчмарк").ОчиститьПараметры(); + + ПараметрыМетода = Новый Массив(); + ПараметрыМетода.Добавить(100); + + // Действие и Проверка + Ожидаем + .Что(Дескриптор) + .Метод("ДобавитьПараметры", ПараметрыМетода) + .ВыбрасываетИсключение("Передача одиночного значения недопустима для метода бенчмарка <Бенчмарк>, так как он ожидает 2 параметра(ов)."); + +КонецПроцедуры + +#КонецОбласти + &Тест Процедура Тест_КатегорииИзАннотации() Экспорт @@ -553,7 +657,7 @@ КонецПроцедуры &Тест -Процедура Тест_ДолженПроверитьЗапретЗапускаПриНаличииНесериализуемыхПараметров() Экспорт +Процедура Тест_ПроверяетОшибкуЗапускаПриНаличииНесериализуемыхПараметров() Экспорт Тип = Тип("БенчмаркСПараметрамиПоля"); @@ -1108,7 +1212,7 @@ Ожидаем .Что(Бенчмаркинг) .Метод("Запустить", ПараметрыМетода) - .ВыбрасываетИсключение("Количество переданных параметров должно совпадать количеству параметров метода бенчмарка <БенчмаркДваПараметра>"); + .ВыбрасываетИсключение("Количество переданных параметров (1) не соответствует ожидаемому количеству (2) для метода бенчмарка <БенчмаркДваПараметра>."); КонецПроцедуры