Простой запуск юнит-тестов

Шаблон экспресс теста на базе xUnitFor1C

Постановка задачи

Я довольно часто пользуюсь инструментом xUnitFor1C. Кроме того периодически приходится писать код и тестировать на разных машинах, удаленных рабочих столах и т.п.
Довольно неудобно вспоминать где я положил браузер тестирования на конкретной машине: в какой сетевой папке или локально, под какую версию браузера были написаны эти тесты несколько месяцев назад, есть ли там нужный мне плагин нужной мне версии и т.д. 
Кроме того иногда возникает желание передать тесты кому-нибудь еще, непосвященному в TDD. При этом приходится объяснять, что нужно скопировать с гита файлы, распаковать, запустить такую-то обработку, из нее открыть мой файл с тестами. Такое объяснение вводит в замешательство даже программистов, не говоря уже о консультантах.
Поэтому возникла идея встроить браузер тестирования в сам тест, чтобы для загрузки списка тестов достаточно было открыть один только файл с этими тестами.

Решение

Чтобы упростить для других пользователей (а также в некоторых случаях и для себя) использование инструмента xUnitFor1C, я написал небольшой шаблон теста, в который встроил браузер и нужные мне плагины. При этом размер обработки увеличился незначительно — примерно на 300 кб.
Суть идеи следующая:
— браузер тестирования с плагинами я поместил в архив и встроил в обработку в виде бинарного макета
— весь код по распаковке браузера я поместил в отдельный модуль. В качестве модуля использовал дополнительую форму. Всего получилось две формы: одна для обычного, другая для управляемого приложения.
— в основной форме теста я добавил процедуру ПриОткрытии(), из которой запускается сценарий по распаковке браузера, его открытию и загрузке в него текущего теста. 
— в самом браузере тестирования я внес единственную доработку: в обычной форме метод ЗагрузитьТесты() сделал экспортным.

Код модуля обработки с тестами не содержит никаких служебных вставок.

В форму с тестами на клиенте добавилась всего одна служебная процедура. Вот как выглядит код:

Форма

&НаКлиенте
Перем КонтекстЯдра;

&НаКлиенте
Перем Ожидаем;

#Область _ // основная процедура для юнит-тестирования xUnitFor1C

&НаКлиенте
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт

КонтекстЯдра = КонтекстЯдраПараметр;
Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");

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

&НаКлиенте
Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт

НаборТестов.НачатьГруппу("Выполнение тестов (на клиенте)");
НаборТестов.Добавить("ТестДолжен_ПроверитьСуммуДваИДваНаКлиенте");

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

#КонецОбласти

#Область _ // Блок юнит-тестов

&НаКлиенте
Процедура ТестДолжен_ПроверитьСуммуДваИДваНаКлиенте() Экспорт

Ожидаем.Что(2+2).Равно(4);

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

#КонецОбласти

#Область _ // Служебная часть - запуск браузера

&НаКлиенте
Процедура ПриОткрытии(Отказ)

Отказ = Истина;

ПозицияРазделителя = СтрДлина(ЭтаФорма.ИмяФормы);
Пока Сред(ЭтаФорма.ИмяФормы, ПозицияРазделителя, 1) <> "." Цикл
ПозицияРазделителя = ПозицияРазделителя - 1;
КонецЦикла;
ИмяФормыЛаунчер = Лев(ЭтаФорма.ИмяФормы, ПозицияРазделителя) + "ЗапускБраузераУФ";

ПолучитьФорму(ИмяФормыЛаунчер).ЗапуститьБраузер();

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

#КонецОбласти

Использование

С применением описанной схемы формат тестов не поменялся, поэтому:
 — тест со встроенным браузером без проблем открывается привычным способом
 — в любой уже имеющийся тест можно встроить браузер при необходимости

 Чтобы написать тест нужно:
 — создать новую обработку с юнит-тестами копированием из шаблона
 — описать тестовый случай
 — запустить эту обработку

Послесловие

Я не ожидаю, что найдется большое количество сторонников описанной идеи. Но мне она показалась интересной и полезной, поэтому выкладываю здесь, чтобы была под рукой.


Обновление 2024-02-04

Убрал синхронный вызов при открытии браузера, чтобы можно было запускать в тонком клиенте с запретом модальности


Обновление 2024-04-09

Сделал, чтобы тест запускался, даже если обработка является встроенной в конфигурацию.

2 Comments

  1. artbear

    Интересная идея.

    А почему бы свой результат не выложить на гитхаб? для возможности последующей доработки.

    Reply
  2. json

    (1) а выложил уже, только архив с браузером исключил

    https://github.com/progromaking/templates

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *