From 2fb2e614c186b4ef43eea3abc32a9ea859f253f2 Mon Sep 17 00:00:00 2001 From: leemuar Date: Sun, 5 Nov 2017 10:31:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B4=D0=B0=20=D1=83=20=D0=BE=D0=B1=D1=8A?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B0=20(=D1=80=D0=B5=D1=88=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Для xUnit - ПроверитьМетодСуществует() Для BDD - ИмеетМетод() --- src/bdd-asserts.os | 18 +++++ src/xunit-asserts.os | 20 ++++++ tests/bdd-assertions-tests-additional.os | 89 ++++++++++++++++++++++++ tests/xunit-assertions-tests.os | 62 +++++++++++++++++ 4 files changed, 189 insertions(+) create mode 100644 tests/bdd-assertions-tests-additional.os create mode 100644 tests/xunit-assertions-tests.os diff --git a/src/bdd-asserts.os b/src/bdd-asserts.os index 3224269..8757182 100644 --- a/src/bdd-asserts.os +++ b/src/bdd-asserts.os @@ -271,6 +271,24 @@ Возврат ЭтотОбъект; КонецФункции +// Проверяет существование метода с указанным именем +// +// Выбрасывает исключение, если метод отсутствует +// +// Параметры: +// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить +// +Функция ИмеетМетод(Знач ИмяМетода) Экспорт + Перем Рефлектор; + + Рефлектор = Новый Рефлектор; + Если НЕ ЛогическоеВыражениеВерно(Рефлектор.МетодСуществует(ПроверяемоеЗначение, ИмяМетода)) Тогда + ВызватьОшибкуПроверки("Ожидали что объект имеет метод с именем '" + ИмяМетода + "'" + ФорматДСО(ДопСообщениеОшибки)); + КонецЕсли; + + Возврат ЭтотОбъект; +КонецФункции + // { Helpers Функция ФорматДСО(Знач ДопСообщениеОшибки) Если ДопСообщениеОшибки = "" Тогда diff --git a/src/xunit-asserts.os b/src/xunit-asserts.os index 945838c..ebf7d90 100644 --- a/src/xunit-asserts.os +++ b/src/xunit-asserts.os @@ -97,6 +97,26 @@ КонецЕсли; КонецПроцедуры +// Проверяет существование метода у объекта +// +// Выбрасывает исключение, если метод отсутствует +// +// Параметры: +// Объект - Любой - Объект, у которого требуется проверить наличие метода +// +// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить +// +// ДопСообщениеОшибки - Строка - Необязательный. Дополнительное пояснение проверки. +// Включается в текст исключения в случае, если проверка не была пройдена +Процедура ПроверитьМетодСуществует(Знач Объект, Знач ИмяМетода, Знач ДопСообщениеОшибки = "") Экспорт + Перем Рефлектор; + + Рефлектор = Новый Рефлектор; + Если НЕ Рефлектор.МетодСуществует(Объект, ИмяМетода) Тогда + ВызватьИсключение "Ожидали, что объект имеет метод с именем " + ИмяМетода + ФорматДСО(ДопСообщениеОшибки); + КонецЕсли; +КонецПроцедуры + Функция ФорматДСО(ДопСообщениеОшибки) Если ДопСообщениеОшибки = "" Тогда Возврат ""; diff --git a/tests/bdd-assertions-tests-additional.os b/tests/bdd-assertions-tests-additional.os new file mode 100644 index 0000000..8a5831c --- /dev/null +++ b/tests/bdd-assertions-tests-additional.os @@ -0,0 +1,89 @@ +Перем мОбъектТеста; + + +Функция ПолучитьСписокТестов(юТест) Экспорт + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание"); + ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы"); + + Возврат ВсеТесты; +КонецФункции + + +Процедура ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт + мОбъектТеста + .Что(Новый Массив) + .ИмеетМетод("Добавить") + ; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт + Попытка + мОбъектТеста + .Что(Новый Массив) + .ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть"); + Исключение + Возврат; + КонецПопытки; + + // тест должен завершиться в обработке исключения + // если дошло сюда - это ошибка + ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло"; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт + Перем ЧастьТекста, Сообщение; + + ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~"; + Попытка + мОбъектТеста + .Что(Новый Массив, ЧастьТекста) + .ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть"); + Исключение + Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда + Сообщение = "Ожидали, что проверка наличия несуществующего метода у объекта выбросит исключение с указанным текстом, но текст не был найден в тексте исключения" + Символы.ПС + + "Ожидаемый текст: " + ЧастьТекста + Символы.ПС + + "Текст исключения: " + ОписаниеОшибки(); + ВызватьИсключение Сообщение; + Иначе + Возврат; + КонецЕсли; + КонецПопытки; + + // тест должен завершиться в обработке исключения + // если дошло сюда - это ошибка + ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло"; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание() Экспорт + Попытка + мОбъектТеста + .Что(Новый Массив) + .Не_() + .ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть"); + Исключение + ВызватьИсключение "Ожидали, что проверка существования метода совместно с отрицанием не выбросит исключение. " + ОписаниеОшибки(); + КонецПопытки; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы() Экспорт + Если мОбъектТеста.Что(Новый Массив).ИмеетМетод("Добавить") <> мОбъектТеста Тогда + ВызватьИсключение "Ожидали, что метод ИмеетМетод() поддерживает цепные вызовы (возвращает объект)"; + КонецЕсли; +КонецПроцедуры + + +Процедура Инициализация() + мОбъектТеста = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "bdd-asserts.os")); +КонецПроцедуры + + +Инициализация(); \ No newline at end of file diff --git a/tests/xunit-assertions-tests.os b/tests/xunit-assertions-tests.os new file mode 100644 index 0000000..8e88e4e --- /dev/null +++ b/tests/xunit-assertions-tests.os @@ -0,0 +1,62 @@ +Перем хЮнит; + + +Функция ПолучитьСписокТестов(юТест) Экспорт + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода"); + ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода"); + ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом"); + + Возврат ВсеТесты; +КонецФункции + + +Процедура ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт + Попытка + хЮнит.ПроверитьМетодСуществует(Новый Массив, "Добавить"); + Исключение + ВызватьИсключение ОписаниеОшибки() + ". Проверка существующего метода вызвала исключение, хотя не должна была"; + КонецПопытки; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт + Попытка + хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть"); + Исключение + Возврат; + КонецПопытки; + + // тест должен завершиться в обработке исключения + // если дошло сюда - это ошибка + ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло"; +КонецПроцедуры + + +Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт + Перем ЧастьТекста; + + ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~"; + Попытка + хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть", ЧастьТекста); + Исключение + Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда + ВызватьИсключение ОписаниеОшибки() + ". Текст исключения не содержит ожидаемого текста"; + Иначе + Возврат; + КонецЕсли; + КонецПопытки; + + // тест должен завершиться в обработке исключения + // если дошло сюда - это ошибка + ВызватьИсключение "Проверка отсутствующего метода должна была выбросить исключение, но этого не произошло"; +КонецПроцедуры + + +Процедура Инициализация() + хЮнит = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "xunit-asserts.os")); +КонецПроцедуры + + +Инициализация();