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
18 changes: 18 additions & 0 deletions src/bdd-asserts.os
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,24 @@
Возврат ЭтотОбъект;
КонецФункции

// Проверяет существование метода с указанным именем
//
// Выбрасывает исключение, если метод отсутствует
//
// Параметры:
// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить
//
Функция ИмеетМетод(Знач ИмяМетода) Экспорт
Перем Рефлектор;

Рефлектор = Новый Рефлектор;
Если НЕ ЛогическоеВыражениеВерно(Рефлектор.МетодСуществует(ПроверяемоеЗначение, ИмяМетода)) Тогда
ВызватьОшибкуПроверки("Ожидали что объект имеет метод с именем '" + ИмяМетода + "'" + ФорматДСО(ДопСообщениеОшибки));
КонецЕсли;

Возврат ЭтотОбъект;
КонецФункции

// { Helpers
Функция ФорматДСО(Знач ДопСообщениеОшибки)
Если ДопСообщениеОшибки = "" Тогда
Expand Down
20 changes: 20 additions & 0 deletions src/xunit-asserts.os
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,26 @@
КонецЕсли;
КонецПроцедуры

// Проверяет существование метода у объекта
//
// Выбрасывает исключение, если метод отсутствует
//
// Параметры:
// Объект - Любой - Объект, у которого требуется проверить наличие метода
//
// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить
//
// ДопСообщениеОшибки - Строка - Необязательный. Дополнительное пояснение проверки.
// Включается в текст исключения в случае, если проверка не была пройдена
Процедура ПроверитьМетодСуществует(Знач Объект, Знач ИмяМетода, Знач ДопСообщениеОшибки = "") Экспорт
Перем Рефлектор;

Рефлектор = Новый Рефлектор;
Если НЕ Рефлектор.МетодСуществует(Объект, ИмяМетода) Тогда
ВызватьИсключение "Ожидали, что объект имеет метод с именем " + ИмяМетода + ФорматДСО(ДопСообщениеОшибки);
КонецЕсли;
КонецПроцедуры

Функция ФорматДСО(ДопСообщениеОшибки)
Если ДопСообщениеОшибки = "" Тогда
Возврат "";
Expand Down
89 changes: 89 additions & 0 deletions tests/bdd-assertions-tests-additional.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
Перем мОбъектТеста;


Функция ПолучитьСписокТестов(юТест) Экспорт
ВсеТесты = Новый Массив;

ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода");
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода");
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом");
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание");
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы");

Возврат ВсеТесты;
КонецФункции


Процедура ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт
мОбъектТеста
.Что(Новый Массив)
.ИмеетМетод("Добавить")
;
КонецПроцедуры


Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт
Попытка
мОбъектТеста
.Что(Новый Массив)
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
Исключение
Возврат;
КонецПопытки;

// тест должен завершиться в обработке исключения
// если дошло сюда - это ошибка
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
КонецПроцедуры


Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт
Перем ЧастьТекста, Сообщение;

ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~";
Попытка
мОбъектТеста
.Что(Новый Массив, ЧастьТекста)
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
Исключение
Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда
Сообщение = "Ожидали, что проверка наличия несуществующего метода у объекта выбросит исключение с указанным текстом, но текст не был найден в тексте исключения" + Символы.ПС
+ "Ожидаемый текст: " + ЧастьТекста + Символы.ПС
+ "Текст исключения: " + ОписаниеОшибки();
ВызватьИсключение Сообщение;
Иначе
Возврат;
КонецЕсли;
КонецПопытки;

// тест должен завершиться в обработке исключения
// если дошло сюда - это ошибка
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
КонецПроцедуры


Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание() Экспорт
Попытка
мОбъектТеста
.Что(Новый Массив)
.Не_()
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
Исключение
ВызватьИсключение "Ожидали, что проверка существования метода совместно с отрицанием не выбросит исключение. " + ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры


Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы() Экспорт
Если мОбъектТеста.Что(Новый Массив).ИмеетМетод("Добавить") <> мОбъектТеста Тогда
ВызватьИсключение "Ожидали, что метод ИмеетМетод() поддерживает цепные вызовы (возвращает объект)";
КонецЕсли;
КонецПроцедуры


Процедура Инициализация()
мОбъектТеста = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "bdd-asserts.os"));
КонецПроцедуры


Инициализация();
62 changes: 62 additions & 0 deletions tests/xunit-assertions-tests.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
Перем хЮнит;


Функция ПолучитьСписокТестов(юТест) Экспорт
ВсеТесты = Новый Массив;

ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода");
ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода");
ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом");

Возврат ВсеТесты;
КонецФункции


Процедура ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт
Попытка
хЮнит.ПроверитьМетодСуществует(Новый Массив, "Добавить");
Исключение
ВызватьИсключение ОписаниеОшибки() + ". Проверка существующего метода вызвала исключение, хотя не должна была";
КонецПопытки;
КонецПроцедуры


Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт
Попытка
хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть");
Исключение
Возврат;
КонецПопытки;

// тест должен завершиться в обработке исключения
// если дошло сюда - это ошибка
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
КонецПроцедуры


Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт
Перем ЧастьТекста;

ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~";
Попытка
хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть", ЧастьТекста);
Исключение
Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда
ВызватьИсключение ОписаниеОшибки() + ". Текст исключения не содержит ожидаемого текста";
Иначе
Возврат;
КонецЕсли;
КонецПопытки;

// тест должен завершиться в обработке исключения
// если дошло сюда - это ошибка
ВызватьИсключение "Проверка отсутствующего метода должна была выбросить исключение, но этого не произошло";
КонецПроцедуры


Процедура Инициализация()
хЮнит = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "xunit-asserts.os"));
КонецПроцедуры


Инициализация();