Автотесты для 1С: xUnitFor1C #765198


#0 by romix
Используете ли вы эту систему в своей разработке? Система выглядит в целом приятно, я написал несколько простых тестов. Но все время натыкаюсь на сложности. Например не оч. понятно как выгружать тестовые данные (у меня на простом документе всё зависло) и как им удается избегать точки останова в отладчике. :-)
#1 by Злопчинский
Ибо Длинных разработок с нуля нет Адля мелких допилов типовых конф нафиг не нужна
#2 by romix
У нас длинная разработка с нуля. Поступило требование от руководства - тестировать. ? Думаю, что со временем такие требования станут общими, и даже 1С к ним подтянется. ?
#3 by romix
Смайлы пропечатались как знак ?
#4 by romix
Думаю что проще всего запустить тесты для процедур перед записью (проверки и заполнения), процедур проведения. Причем, только позитивные тесты (что документ в этих ситуациях не выдает исключений). Печать еще можно туда же подтянуть. Это минимум, который можно сделать не думая - получится проверка на соответствие реквизитов коду и на работоспособность запросов.
#5 by Asmody
Так авторы все тут: , (этот в бане за укропство).
#6 by romix
Сделал (для какой-то другой цели) разбор кода 1С (выделение строковых литералов и комментариев) через тестирование. Тест выполнен не через xUnitFor1C, но смысл - примерно тот же (?). Оказалось, что всякий разбор чего-либо через тестирование кодить гораздо приятнее.
#7 by Aleksey
Кому то захотелось продолжение банкета? Нужели еще не все не наговорились на эту тему?
#8 by romix
Ага поставил теги, чтобы ветки не потерялись. ИМХО пора уже секцию заводить. :-)
#9 by romix
Решили копать именно в направлении xUnitFor1C. Но там повсюду какие-то сложности (возможно, они все вызваны временным несовершенством движка 1С, а когда за тестирование возьмется (?) сама 1С, все они будут так или иначе решены). Например, получение списка функций и их исполнение так, чтобы оставался работоспособным отладчик 1С. Выгрузку и загрузку тестового набора я задумываюсь сделать не через Моксели, а своей разработкой, чтобы закачивало пошагово рекурсивно через веб или файлы+LCK.
#10 by Aleksey
#11 by romix
Ага, добавил тегов.
#12 by Asmody
Ничего странного в своей статье не находишь?
#13 by romix
Просто небольшой пример, чтобы не потерялось. Зачем это нужно - на диске ИТС есть штатный тест кода на соответствие стандартам. Хочу под него кое-что у себя в 1С позатачивать, вдруг получится. Но он не выявляет даже ошибочных запросов (например, когда я преднамеренно вношу в код запроса ошибки). Так что для таких тестов понадобится что-то вроде xUnitFor1C.
#14 by romix
Читаю старую ветку на запись документов по списку (ПередЗаписью, ОбработкаПроведения) - это, скорее всего, будет то, с чего окажется проще всего начать покрытие тестами (для начала - простыми позитивными) уже существующей написанной конфигурации. Записывается и проводится документ - хорошо, выдает исключение или не проводится - плохо.
#15 by romix
Согласен с  artbear вот здесь: " Тесты ГУИ писать лучше пореже, слишком это неблагодарное и сложное дело. Лучше всю бизнес-логику выносить из ГУИ, чтобы слой бизнес-логики был изолирован от формы". Я у себя с формы документа массивные проверки ПередЗаписью поубирал в модуль менеджера. А там уже на форму можно не лезть, а просто тестировать на примерах документов.
#16 by romix
Там же 318 - да, когда пишешь падающий тест сначала - это удобно. По крайней мере, для функций, которые должны что-то строковое кропотливо разбирать или парсить. Для типичных примеров разработки в 1С (таких как экзаменационные задачи) будет ли быстрее сначала создать тест? И как его создать: руками, что ли, вносить. И куда. Вот этот вопрос я пока не могу понять в xUnitFor1C, там есть какие-то таблицы, но с какой стороны к ним подойти - сходу непонятно.
#17 by Злопчинский
чтото я в тестах не увидел теста на обработку
#18 by romix
Добавил тест №13.
#19 by Злопчинский
добавить - не вопрос! Вопрос - почему его не было? И мне кстати интересно Пройдет ли тест Стр = "|" ???
#20 by romix
Наверняка можно еще придумать несколько тестов - будет движение к совершенству. :-)
#21 by Злопчинский
вопрос в том, что и предыдущиая моя строка и эта - это явные граничные условмя, проверять их надо однознвчно, странно что этого нет в тестах
#22 by romix
Тест 2. Комментарий там в любом случае не пустой, возвращает минимум // если он есть. Поэтому это не граничное условие. Но почему бы его не ввести - я только за. Лучше перебдеть, чем недобдеть.
#23 by Злопчинский
"возвращает минимум // если он есть" - это ваше мнение, не подкрепленное тестом. я бы включил в тесты проверку обработки как минимум следующих строк Стр="""|"""; - это навскидку, не думая
#24 by Asmody
Не в этом был вопрос. Посчитай количество строк кода, непосредственно решающих задачу, и количество строк в тестах. Заметь, что тесты не покрыли и половины случаев.
#25 by romix
Все случаи имхо отработаны. Там можно и ( | ) разными способами нарисовать - кому как больше нравится. Кстати, это вики - желающие, если пример заинтересовал, могут вносить улучшения. Там же, как говорят, рулит парное программирование, просмотр чужого кода, и все такие дела. :-) Ответственных или вертикали тут нет - интернет - это одна сплошная безответственность. :-) Тесты не гарантируют отсутствия ошибок, а только уменьшают их вероятность (по кр. мере об этом, емнип, неоднократно пейсали artbear сотоварищи). Так или иначе - правьте смело.
#26 by Ник080808
а можно pumbaEO разбанить в 1с и забанить в лайф?
#27 by Asmody
А он еще сидит на 1С? А как же принципы?
#28 by Злопчинский
имхо - нет.. //// - весьма разные вещи, имхо
#29 by Злопчинский
и ваще непонятно. нахрена эта тдд? если мне для верификации, нужно прогнать тест и сравнить это с эталонным результатом - который я откуда возьму? из головы? если у меня есть эталонный результат в голове - нафига мне строить тесты. которые будут мой эталонный результат из башки переносить в код. я это ВООБЩЕМ могу и без тестов сделать. не совсем тупой еще. для чего это тдд тогда? - просто некая методика, облегчающая воспроизведение моего представленяи результата в голове и его преобразования в код? тогджа такая методика д.б. достаточно формальной, чтобы ей можно было следовать "промышленным" способом. а по факту - мы имеем придумывание кода (нетривиальная операция) и придумывание тестов (та же самая нетривиальная операция) - где здесь формальность? я вон с ромиксом не могу согласиться насчет набора тестов даже в той задаче которую он нарисовал. Он считает - что тех тестов которые есть - достаточно, я - недостаточно. Вопрос: кто прав? где ИНСТРУМЕНТ? если один считает, что молотком 100 граммов забили легко гвоздик семерочку, и гвоздик десяточку - следует ли из этого что молотком 100 граммов будет также легко забить гвоздь двухсотку - кованный, четырехуголный..?
#30 by Хранимая Процедура
- а ну поподробнее прод дымовое тестирование. Это ТОЛЬКО проверка, запислася ли документ?
#31 by Злопчинский
что такое тдд? - дисциплина программирования? если человек пишет изначально такой код, что я на него смотрю и мне то ли плакать, то ли смеяться хочется (мой код тогда ваще=принцесса) - с тдд он будет писать красивый код? очень сомневаюсь. будет все также криво, если даже не хуже...
#32 by Хранимая Процедура
- подброшу на вентилятор: это для прогеров, которые страдают ретроградной амнезией, постоянно отвлекаются на мисту и прносайты, а также не могут сконцентрироваться. Им, согласно мантре Fail First нужно сначала написать, что я хочу накодить, а потом тебе continous тест раннер скажет куда в коде нужно что-то вставлять.
#33 by Хранимая Процедура
И еще ТДД применяют для неуверенных в себе задроты. Настоящие Чаки Норрисы уверены, что только что внесенное изменение не повлияло на другие части кода. И комитят все в продакшн.
#34 by Aleksey
А причем тут внесения изменения и разработка программы?
#35 by Aleksey
у нас еще нет ничего, чистый лист, о каких изменениях написанных другим программистом идёт речь?
#36 by Хранимая Процедура
- читай, зачем нужен ТДД
#37 by Хранимая Процедура
- когда ты разрабатываешь программу, ты вносишь последовательные изменения. С тестами у тебя будет увереноость, что вносимые изменания не поломают уже написанный функционал.
#38 by Asmody
Чаки Норрисы никуда не коммитят, а правят прямо на продакшене.
#39 by Asmody
Да не будет нихера такой уверенности. Точнее, эта уверенность ложная. То, что CI собрал твой код и прогнал тесты не говорит о том, что он не содержит ошибок.
#40 by Хранимая Процедура
- ога. На площадке клиента. И клиент за это платит. Концепт: "клиент платит за ошибки программиста" - это я уже где-то слышал. Я не знаю, как там с 1С, но в JS тесты очень сильно все упрощают, особенно, если оно так делается:
#41 by Asmody
Клиент платит за результат. А вот адептам xDD, похоже, платят за количество строк.
#42 by Злопчинский
не, с нуля писать - может и полезно будет. но писать, не зная что писать... пока я упорно всю эту разработку через тдд свожу к разработке сверху вниз.
#43 by Хранимая Процедура
- >А вот адептам xDD, похоже, платят за количество строк. ты так говоришь, как будто это плохо
#44 by Хранимая Процедура
вообще TDD - это часть номрального СКРАМа в СКРАМе нет четких требований
#45 by Хранимая Процедура
еще ТДД очень сильно упрощает коммуникацию среди программистов. Особенно в интернациональных тимах.
#46 by Ник080808
кстати хорошая система оплаты. Только за уменьшение количества строк
#47 by Злопчинский
- а почему оплата какаято не такая как договаривались? - ну потому что написали вы не то что нам хотелось...
#48 by Злопчинский
Долой оплату за процес! Даешь оплату за результат!
#49 by los_hooliganos
1С как скриптовый язык не требует тестирования кода. Важнее тестировать сам бизнес-процесс.
#50 by mikeA
бывает что по xDD РЕЗУЛЬТАТ получается быстрее, качественне и дешевле так что it depends
#51 by Asmody
Сделай себе татуировку на лбу: "Никому не нужны программы, всем нужны результаты их работы."
#52 by Хранимая Процедура
- программистам платят за процесс, а не за результат
#53 by Mr_Rm
Прекрасный пример на видео с JS. См. с 0:50 по 1:02, когда в тесте пишется сначала: expect(calculator.multiply(3,4)).toBe; И всё - правильный (простейший!) код тест уже не пройдёт.
#54 by Asmody
За процесс платят проституткам. Ну, может еще актёрам и певцам.
#55 by Хранимая Процедура
- программист никогда не может отвечать за результат. По определению.
#56 by Garykom
программист может отвечать за то что при правильных данных программа работает верно или это будет оперативно исправлено программистом, с нахождением ошибок в исходных данных (пользователи накосячили) отвечает понятно дело руководитель и пользователь
#57 by vicof
За результат своей работы должен отвечать - или это херовый программист.
#58 by Карупян
Если есть бюджет на написание тестов - нужно писать. А на нет и суда нет
#59 by Хранимая Процедура
- эх.. ты не работал программистом.
#60 by artbear
>не оч. понятно как выгружать тестовые данные (у меня на простом документе всё зависло) и как им удается избегать точки останова в отладчике. :-) Расшифруй оба пункта. что делаешь, что хочешь, что не так? Приглашаю в чат xUnitFor1C для более оперативных ответов от меня и других контрибьюторов
#61 by artbear
По дымовым тестам - в xUnitFor1C есть несколько примеров дымовых тестов. Например, я в свое время реализовал дымовой тест открытия всех форм (формы списков и элементов, справочники, документы, отчеты, обработки). Также делаются попытки перезаписи справочника и документа, создать новый элемент/документ Тест очень полезен при обновлении конфигурации. Также есть примеры запуска разных тестов под разными пользователям. удобно для проверки работы системы для разных ролей. и т.п. и т.д
#62 by romix
Ага спасибо. Рабочая база слишком велика для тестирования, хочется закачивать отдельные документы между одинаковыми конфигурациями как раз для целей тестирования. Я полез в приложенную обработку xddDataFixtureGen, , интуитивно понажимал там на кнопочки, всё зависло (наверное, оказалась велика глубина рекурсии). Предположим мне удалось выгрузить Моксель, а дальше с ним что делать - руками парсить? Обратной обработки для загрузки я не нашел. Может там планируется закачиватель данных - или все на практике используют что-то готовое с ИТС/Инфостарта?
#63 by Карупян
Эх, вот если бы кто замутил проект по написанию автотестов для типовых конфиг ....
#64 by Карупян
есть процедура по созданию из мокселя
#65 by artbear
А доку хоть немного почитать? :) Смотрим вводную страницу Вики проекта Там написано: Возможно очень простое создание тестовых данных на основании табличных макетов. Эти макеты можно генерировать из реальных боевых данных. Полученные данные в тестах загружаются одной строкой кода. Посмотрите Генерация данных. Открываем Генерация данных Читаем и вставляем в свой код
#66 by artbear
Там же есть доп.ссылка на
#67 by artbear
Пример кода для v4 Пример кода для v3
#68 by Хранимая Процедура
[ковыряя MonoDevelop] Доктор, скажите, вот в MonoDevelop есть проблемы с отладчиком - там брейкпойнты не работают. И отладочная печать в консоль не выводится. Остается только выводить MessageBox-ом. Так вот, каковы преимущества MessageBox-Driven-Development по сравнению с Test-Driven-Development? Нужно ли мне статические блобы рефакторить в IoC  и потом писать юнит тесты? Спасибо за внимание, доктор.
#69 by romix
А, спасибо. Всё еще хочу приделать закачиватель через Web-интерфейс, но попробую и так. Насчет работы отладчика - я кажется придумал как ее реализовать, даже не теряя совместимости. Дело в том, что если мы запускаем несколько десятков функций, которые что-то тестируют, при ошибке хочется видеть точное место ошибки и дерево вызовов, если ошибка произошла где-то внутри - то есть, именно то, что мы видим при обычном тестировании и отладке руками. В тестовой обработке нужно заготовить экспортируемые функции Тест_001, Тест_002, ... Тест_100 (наверное, 100 будет достаточно). Думаю, что это также уменьшит клавиатурный процесс и объем копи-паста при создании большого числа тестовых функций. Также экспортировать функцию с максимальным номером, например ЧислоПронумерованныхТестов - возвращает 45, если было задействовано 45 пронумерованных функций-тестов. Или выяснять максимальное число задействованных функций вызовом их с конца от 100 - первая, которая возвращает не Неопределенно - есть искомая. Можно сделать и так, и так, если сама функция ЧислоПронумерованныхФункций возвращает Неопределенно.
#70 by quest
нафига он тебе такой? Тем более со скоростью работы 1С... Вынеси во внешнюю компоненту - будет счастье.
#71 by quest
+ для теста такой случай еще а0 = "аааа
#72 by Злопчинский
угу... упираемся в вопрос - как определить более-менее минимальный набор тестов..? нет такого правила - превращается все в искуство, а писать без тдд или с тдд - это вообщем тоже искуство.
#73 by Карупян
минимальный набор тестов - это 1 тест )))
#74 by 4St
Используем, хоть и не на всю катушку. Помогает даже не столько тестировать, сколько изначально грамотнее структурировать код.
#75 by 4St
хотя и регрессию пару раз отловили тестами.
#76 by AnyBody
Кто имеет с ними какие либо контакты, или где можно сообщить им об ошибке без регистраций каких либо. СериализаторMXL При загрузке макета созданного в БП2 из документа "РеализацияТоваровУслуг" с выгрузкой движений по регистру Бухгалтерии получаем ошибку: {ВнешняяОбработка.СериализаторMXL.МодульОбъекта(1077)}: ОшибкаПоиска:  Реквизит <СубконтоКт2>: Искали значение <НДС18> {ВнешняяОбработка.СериализаторMXL.МодульОбъекта}: Поле объекта не обнаружено (СубконтоКт2) Если потребуется, напишу как исправить/обойти.
#77 by vicof
Написал разработчику на почту
#78 by artbear
Можно создать задачу для исправления Предлагаю там же обсудить исправление. Спасибо за письмо.
#79 by AnyBody
Там регистрация требуется. Мне пока как-то без надобности.
#80 by artbear
Лады, пиши сюда. Жду
#81 by AnyBody
Общий смысл ошибки заключается в том, что значение этого субконто в проводке есть перечисление. При генерации макета колонка доп.тип в этом случае не заполняется. В коде, который загружает макет, этот реквизит в "попытке" не находит описание метаданных и валится с описанной ошибкой. Я это у себя поправил. Дальше можно руками в макете дописать "ПеречислениеСсылка.<КонкретноеИмя>". Ну и можно при генерации макета сделать то же самое.
#82 by AnyBody
В терминах кода это выглядит так: строка модуля объекта № 994 МетаданныеРеквизита = НаборМдРеквизитов[стрПоле.Имя];
#83 by AnyBody
и в функции Функция ОбработатьРеквизитОбъекта( после строк:         ВызватьИсключение описаниеОшибки + " Не умею обрабатывать реквизит <"+имяРеквизита+"> у объекта <"+Мд.ПолноеИмя+">"; строка
#84 by AnyBody
Возможно это и не лучшая правка, если я не совсем понял алгоритм автора.
#85 by artbear
1 Можешь свой доработанный вариант обработки генератора скинуть мне на мыло? aartbear(гав)gmail 2 Достаточно доработки в обработке-генераторе? обработку-тестирования xddTestRunner не нужно дорабатывать для правильного получения данных из макета?
#86 by artbear
+ вопрос 2 снимается, т.к. ты используешь версию с плагинами и изменение нужно сделать только в одном модуле.
#87 by AnyBody
Отправил.
#88 by AnyBody
Не прошло, у тебя на самом деле в начале 2 буквы аа?
#89 by AnyBody
Ушло.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С