grumagargler / tester

Тестер 1С
http://tester.help
BSD 2-Clause "Simplified" License
178 stars 31 forks source link

Текучие (fluent) утверждения #9

Closed JohnyDeath closed 5 years ago

JohnyDeath commented 5 years ago

Очень удобно пользоваться проверками в виде текучих утверждений как это сделано в xUnitFor1C https://github.com/xDrivenDevelopment/xUnitFor1C/wiki/Текучие-%28fluent%29-утверждения

И тогда нагромождения "Если" превращаются в красивые:

Ожидаем.Что(7).БольшеИлиРавно(7);
Ожидаем.Что("Некая строка")
        .Существует()
        .Не_().ИмеетТип("Число")
        .ИмеетДлину(12)
        .Не_().Содержит("!!!");
JohnyDeath commented 5 years ago

Добавил поддержку текучих утверждений на базе последней конфигурации Тестера версии 1.3.3.6 Добавлено:

Старался сохранить стилистику написания кода. Прошу проверить и высказать пожелания.

Сам cf: https://1drv.ms/u/s!AvAh8V3WSDtWlsZlAgVhfZPVHfXBzw

P.S. в выгруженной конфе имеется еще один модуль с именем "ХТТП". На него можно не обращать внимания, он к данной теме отношения не имеет.

JohnyDeath commented 5 years ago

Прикладываю текст скрипта, которым тестировал всё это:

Ожидаем.Что(ИСТИНА).ЭтоИстина();
Ожидаем.Что(ЛОЖЬ, "Проверка НЕ").НЕ_().ЭтоИстина();
Ожидаем.Что(ЛОЖЬ).ЭтоЛожь();
Ожидаем.Что(2).Равно(1+1);
Ожидаем.Что(2).НЕ_().Равно(3).Равно(2).НЕ_().Равно(4);
Ожидаем.Что(2).Больше(1);
Ожидаем.Что(2).БольшеИлиРавно(2);
Ожидаем.Что(2).БольшеИлиРавно(1);
Ожидаем.Что(2).Меньше(3);
Ожидаем.Что(2).МеньшеИлиРавно(3);
Ожидаем.Что(2).МеньшеИлиРавно(2);
Ожидаем.Что(2).Заполнено();
Ожидаем.Что(Неопределено).Не_().Заполнено();
Ожидаем.Что(0).Существует();
Ожидаем.Что(NULL).Не_().Существует();
Ожидаем.Что(NULL).ЭтоNULL();
Ожидаем.Что(Неопределено).ЭтоНеопределено();
Ожидаем.Что(2).НЕ_().Между(10, 15).Между(0, 5);
Ожидаем.Что("Строка", "Содержание в строке").Содержит("к").НЕ_().Содержит("2");
Ожидаем.Что(Новый Структура("й,ц,у", 1, 2, 3), "Содержание в структуре").Содержит(2);

Массив = Новый Массив; 
Массив.Добавить(1);
Массив.Добавить(3);
Массив.Добавить(5);
Ожидаем.Что(Массив, "Содержание в массиве").НЕ_().Содержит(2);

Ожидаем.Что("ЙЦУК").ИмеетДлину(4);
Ожидаем.Что(Массив).ИмеетДлину(3).НЕ_().ИмеетДлину(5);  

Попытка
    Ожидаем.Что(2, "Должна быть ошибка").Содержит(2);
Исключение
    ОписаниеОшибки = ОписаниеОшибки(); 
    Ожидаем.Что(ОписаниеОшибки).Содержит("не умеет работать с типом").Содержит("Должна быть ошибка");
КонецПопытки;
grumagargler commented 5 years ago

Спасибо за проделанную работу! Я со своей стороны, тщательно проанализировал и адаптировал её. Кое-что пришлось изменить, и дополнить в соответствии с методикой уже существующих сообщений и локализации в тестере, а также тому факту, что у нас сценарии чуть отличаются от юнит-тестов. В общем, мне нужна критика. вот тесты:

течьНаКлиенте ();
течьНаСервере ();

&НаКлиенте
Процедура течьНаКлиенте ()

    Заявить(истина).ЭтоИстина();
    Заявить(ложь, "Проверка НЕ").Не_().ЭтоИстина();
    Заявить(ложь).ЭтоЛожь();
    Заявить(2).Равно(1+1);
    Заявить(2).Не_().Равно(3).Равно(2).Не_().Равно(4);
    Заявить(2).Больше(1);
    Заявить(2).БольшеИлиРавно(2);
    Заявить(2).БольшеИлиРавно(1);
    Заявить(2).Меньше(3);
    Заявить(2).МеньшеИлиРавно(3);
    Заявить(2).МеньшеИлиРавно(2);
    Заявить(2).Заполнено();
    Заявить(неопределено).Не_().Заполнено();
    Заявить(неопределено).Пусто();
    Заявить(0).Существует();
    Заявить(null).Не_().Существует();
    Заявить(null).ЭтоNull();
    Заявить(неопределено).ЭтоНеопределено();
    Заявить(2).Не_().Между(10, 15).Между(0, 5);
    Заявить("Строка", "Содержание в строке").Содержит("к").Не_().Содержит("2");
    Заявить(Новый Структура("й,ц,у", 1, 2, 3), "Содержание в структуре").Содержит(2);

    Массив = Новый Массив; 
    Массив.Добавить(1);
    Массив.Добавить(3);
    Массив.Добавить(5);
    Заявить(Массив, "Содержание в массиве").Не_().Содержит(2);

    Заявить("ЙЦУК").ИмеетДлину(4);
    Заявить("ЙЦУК").Вмещает(4);
    Заявить(Массив).ИмеетДлину(3).Не_().ИмеетДлину(5);
    Заявить(Массив).Вмещает(3).Не_().Вмещает(5);

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

&НаСервере
Процедура течьНаСервере ()

    Заявить(истина).ЭтоИстина();
    Заявить(ложь, "Проверка НЕ").Не_().ЭтоИстина();
    Заявить(ложь).ЭтоЛожь();
    Заявить(2).Равно(1+1);
    Заявить(2).Не_().Равно(3).Равно(2).Не_().Равно(4);
    Заявить(2).Больше(1);
    Заявить(2).БольшеИлиРавно(2);
    Заявить(2).БольшеИлиРавно(1);
    Заявить(2).Меньше(3);
    Заявить(2).МеньшеИлиРавно(3);
    Заявить(2).МеньшеИлиРавно(2);
    Заявить(2).Заполнено();
    Заявить(неопределено).Не_().Заполнено();
    Заявить(неопределено).Пусто();
    Заявить(0).Существует();
    Заявить(null).Не_().Существует();
    Заявить(null).ЭтоNull();
    Заявить(неопределено).ЭтоНеопределено();
    Заявить(2).Не_().Между(10, 15).Между(0, 5);
    Заявить("Строка", "Содержание в строке").Содержит("к").Не_().Содержит("2");
    Заявить(Новый Структура("й,ц,у", 1, 2, 3), "Содержание в структуре").Содержит(2);

    Массив = Новый Массив; 
    Массив.Добавить(1);
    Массив.Добавить(3);
    Массив.Добавить(5);
    Заявить(Массив, "Содержание в массиве").Не_().Содержит(2);

    Заявить("ЙЦУК").ИмеетДлину(4);
    Заявить("ЙЦУК").Вмещает(4);
    Заявить(Массив).ИмеетДлину(3).Не_().ИмеетДлину(5);
    Заявить(Массив).Вмещает(3).Не_().Вмещает(5);

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

Скачать cf

JohnyDeath commented 5 years ago

Всё отлично! И лаконичней получилось. Но есть один баг. Выводит неправильное сообщение, если в утверждении было отрицание. Например код Заявить(истина).Не_().ЭтоИстина(); Выплевывает исключение с текстом:

Значение Истина должно быть Истина

а должно быть так:

Значение Истина НЕ должно быть Истина

За это отвечала переменная переменная модуля обработки с именем DaneilForMessage.

И еще один момент. Ты специально убрал скобки в сообщении об ошибки вокруг значений? Мне кажется, что с ними как-то удобней читаются исключения.

grumagargler commented 5 years ago

Всё, поправил, скачивание по тойже ссылке, посмотри пожалуйста.

И еще один момент. Ты специально убрал скобки в сообщении об ошибки вокруг значений? Мне кажется, что с ними как-то удобней читаются исключения.

Да, понимаешь, у меня же уже есть метод Проверить (), и там без угловых скобок, поэтому я решил сохранить преемственность (а кавычки не ставил, потому что тип может быть не строка).

JohnyDeath commented 5 years ago

Теперь всё отлично, спасибо!