Skip to content

Commit 1aeb339

Browse files
committed
Merge remote-tracking branch 'origin/master' into develop
2 parents 3e2272d + 5aca91c commit 1aeb339

File tree

4 files changed

+189
-0
lines changed

4 files changed

+189
-0
lines changed

src/bdd-asserts.os

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,24 @@
271271
Возврат ЭтотОбъект;
272272
КонецФункции
273273

274+
// Проверяет существование метода с указанным именем
275+
//
276+
// Выбрасывает исключение, если метод отсутствует
277+
//
278+
// Параметры:
279+
// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить
280+
//
281+
Функция ИмеетМетод(Знач ИмяМетода) Экспорт
282+
Перем Рефлектор;
283+
284+
Рефлектор = Новый Рефлектор;
285+
Если НЕ ЛогическоеВыражениеВерно(Рефлектор.МетодСуществует(ПроверяемоеЗначение, ИмяМетода)) Тогда
286+
ВызватьОшибкуПроверки("Ожидали что объект имеет метод с именем '" + ИмяМетода + "'" + ФорматДСО(ДопСообщениеОшибки));
287+
КонецЕсли;
288+
289+
Возврат ЭтотОбъект;
290+
КонецФункции
291+
274292
// { Helpers
275293
Функция ФорматДСО(Знач ДопСообщениеОшибки)
276294
Если ДопСообщениеОшибки = "" Тогда

src/xunit-asserts.os

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,26 @@
9797
КонецЕсли;
9898
КонецПроцедуры
9999

100+
// Проверяет существование метода у объекта
101+
//
102+
// Выбрасывает исключение, если метод отсутствует
103+
//
104+
// Параметры:
105+
// Объект - Любой - Объект, у которого требуется проверить наличие метода
106+
//
107+
// ИмяМетода - Строка - Имя метода, наличие которого требуется проверить
108+
//
109+
// ДопСообщениеОшибки - Строка - Необязательный. Дополнительное пояснение проверки.
110+
// Включается в текст исключения в случае, если проверка не была пройдена
111+
Процедура ПроверитьМетодСуществует(Знач Объект, Знач ИмяМетода, Знач ДопСообщениеОшибки = "") Экспорт
112+
Перем Рефлектор;
113+
114+
Рефлектор = Новый Рефлектор;
115+
Если НЕ Рефлектор.МетодСуществует(Объект, ИмяМетода) Тогда
116+
ВызватьИсключение "Ожидали, что объект имеет метод с именем " + ИмяМетода + ФорматДСО(ДопСообщениеОшибки);
117+
КонецЕсли;
118+
КонецПроцедуры
119+
100120
Функция ФорматДСО(ДопСообщениеОшибки)
101121
Если ДопСообщениеОшибки = "" Тогда
102122
Возврат "";
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
Перем мОбъектТеста;
2+
3+
4+
Функция ПолучитьСписокТестов(юТест) Экспорт
5+
ВсеТесты = Новый Массив;
6+
7+
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода");
8+
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода");
9+
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом");
10+
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание");
11+
ВсеТесты.Добавить("ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы");
12+
13+
Возврат ВсеТесты;
14+
КонецФункции
15+
16+
17+
Процедура ТестДолжен_Проверить_ИмеетМетод_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт
18+
мОбъектТеста
19+
.Что(Новый Массив)
20+
.ИмеетМетод("Добавить")
21+
;
22+
КонецПроцедуры
23+
24+
25+
Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт
26+
Попытка
27+
мОбъектТеста
28+
.Что(Новый Массив)
29+
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
30+
Исключение
31+
Возврат;
32+
КонецПопытки;
33+
34+
// тест должен завершиться в обработке исключения
35+
// если дошло сюда - это ошибка
36+
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
37+
КонецПроцедуры
38+
39+
40+
Процедура ТестДолжен_Проверить_ИмеетМетод_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт
41+
Перем ЧастьТекста, Сообщение;
42+
43+
ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~";
44+
Попытка
45+
мОбъектТеста
46+
.Что(Новый Массив, ЧастьТекста)
47+
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
48+
Исключение
49+
Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда
50+
Сообщение = "Ожидали, что проверка наличия несуществующего метода у объекта выбросит исключение с указанным текстом, но текст не был найден в тексте исключения" + Символы.ПС
51+
+ "Ожидаемый текст: " + ЧастьТекста + Символы.ПС
52+
+ "Текст исключения: " + ОписаниеОшибки();
53+
ВызватьИсключение Сообщение;
54+
Иначе
55+
Возврат;
56+
КонецЕсли;
57+
КонецПопытки;
58+
59+
// тест должен завершиться в обработке исключения
60+
// если дошло сюда - это ошибка
61+
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
62+
КонецПроцедуры
63+
64+
65+
Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетОтрицание() Экспорт
66+
Попытка
67+
мОбъектТеста
68+
.Что(Новый Массив)
69+
.Не_()
70+
.ИмеетМетод("ТакогоИмениМетодаНеДолжноБыть");
71+
Исключение
72+
ВызватьИсключение "Ожидали, что проверка существования метода совместно с отрицанием не выбросит исключение. " + ОписаниеОшибки();
73+
КонецПопытки;
74+
КонецПроцедуры
75+
76+
77+
Процедура ТестДолжен_Проверить_ИмеетМетод_ПоддерживаетЦепныеВызовы() Экспорт
78+
Если мОбъектТеста.Что(Новый Массив).ИмеетМетод("Добавить") <> мОбъектТеста Тогда
79+
ВызватьИсключение "Ожидали, что метод ИмеетМетод() поддерживает цепные вызовы (возвращает объект)";
80+
КонецЕсли;
81+
КонецПроцедуры
82+
83+
84+
Процедура Инициализация()
85+
мОбъектТеста = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "bdd-asserts.os"));
86+
КонецПроцедуры
87+
88+
89+
Инициализация();

tests/xunit-assertions-tests.os

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
Перем хЮнит;
2+
3+
4+
Функция ПолучитьСписокТестов(юТест) Экспорт
5+
ВсеТесты = Новый Массив;
6+
7+
ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода");
8+
ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода");
9+
ВсеТесты.Добавить("ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом");
10+
11+
Возврат ВсеТесты;
12+
КонецФункции
13+
14+
15+
Процедура ТестДолжен_Проверить_МетодСуществует_НеВыбрасываетИсключениеДляСуществующегоМетода() Экспорт
16+
Попытка
17+
хЮнит.ПроверитьМетодСуществует(Новый Массив, "Добавить");
18+
Исключение
19+
ВызватьИсключение ОписаниеОшибки() + ". Проверка существующего метода вызвала исключение, хотя не должна была";
20+
КонецПопытки;
21+
КонецПроцедуры
22+
23+
24+
Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеДляОтсутствующегоМетода() Экспорт
25+
Попытка
26+
хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть");
27+
Исключение
28+
Возврат;
29+
КонецПопытки;
30+
31+
// тест должен завершиться в обработке исключения
32+
// если дошло сюда - это ошибка
33+
ВызватьИсключение "Проверка существования у объекта несуществующего метода должна была выбросить исключение, но этого не произошло";
34+
КонецПроцедуры
35+
36+
37+
Процедура ТестДолжен_Проверить_МетодСуществует_ВыбрасываетИсключениеСУказаннымТекстом() Экспорт
38+
Перем ЧастьТекста;
39+
40+
ЧастьТекста = "ЭтотТекстДолженБытьВТекстеИсключения*#1~";
41+
Попытка
42+
хЮнит.ПроверитьМетодСуществует(Новый Массив, "ТакогоИмениМетодаНеДолжноБыть", ЧастьТекста);
43+
Исключение
44+
Если 0 = СтрНайти(ОписаниеОшибки(), ЧастьТекста) Тогда
45+
ВызватьИсключение ОписаниеОшибки() + ". Текст исключения не содержит ожидаемого текста";
46+
Иначе
47+
Возврат;
48+
КонецЕсли;
49+
КонецПопытки;
50+
51+
// тест должен завершиться в обработке исключения
52+
// если дошло сюда - это ошибка
53+
ВызватьИсключение "Проверка отсутствующего метода должна была выбросить исключение, но этого не произошло";
54+
КонецПроцедуры
55+
56+
57+
Процедура Инициализация()
58+
хЮнит = ЗагрузитьСценарий(ОбъединитьПути(ТекущийСценарий().Каталог, "..", "src", "xunit-asserts.os"));
59+
КонецПроцедуры
60+
61+
62+
Инициализация();

0 commit comments

Comments
 (0)