Порка: TestMeCode.com
От: Garamzin  
Дата: 14.02.19 09:06
Оценка: 7 (3)
Представляю стартовый продукт для тестирования приложений http://TestMeCode.com
На сегодня поддержка только языка Delphi.
Но возможно использовать в языках C++,C#,Basic , ну и любые с использованием СОМ интерфейса.
Для этого нужно переписать демо примеры и добавить в документацию.
Операционная система: Windows
32-х битные приложения. (64 бит не проблема, но хотелось бы стартовать именно с 32 битами )

Документация:
— Только на сайте.

Что сделано:
TestCode
— Тестирование классов, методов, приложений, как одного, так и несколько одновременно.
TestSend
— Расщиренное использование отладочных сообщений. Используется для отладки как одной запущенной версией приложения, так и нескольких (для каждой копии приложения можно использовать свое окно)
— Возможно пользоваться "скрытыми" отладочными сообщениями, которые будут отправляться только по условию.
Tools
— Пока только калькулятор программиста, которым постоянно пользуюсь.

Цена:
Хочу сделать годовую подписку за 27-29 евро.
Смешные деньги, но думаю это послужит, с одной стороны, для распространения, с другой не большое, но стабильное финансовое вливание для дальнейшего развития.

Что сделано:
— Перенес сайт с домена TestMe-On.com на TestMeCode.com
— изменил структуру файлов
— убрал "embeded" использование TestMeCode32.dll

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

Хочу посоветоваться:
1. Что в первую очередь "причесать" для старта продаж?
2. Для приема денег выбрал PPG, но не знаю как интегрируется у них подписка и интересуют "подписочные" тарифы. Может есть другой регистратор специализирующийся на подписках?
3. Для небольшой защиты использую VMProtect, но как использовать это в подписке, еще не продумал.
4. Что делать с форумом? Был форум, утонул в спаме. Какими движками пользуйтесь? Как минимизировать спам? Как первом этапе защитить форум от спамеров, без мониторинга 24х7.
Re[3]: Порка: TestMeCode.com
От: Unhandled_Exception Россия  
Дата: 14.02.19 11:49
Оценка: +2
Здравствуйте, C0x, Вы писали:

C0x>TestComplete умеет и с вэбом работать и смобайл вроде как.


Конечно, я с этим не спорю.

Я почитывал их форум, там тоже было ясно видно, что тестирование десктопных приложений составляет малую часть от всего объема тестирования. Предостерегаю топикстартера.

C0x>А аналог это ты сильно махнул.


Хорошо, что я никогда не слушал никого, кто говорил мне, что "это глупо делать"

Кстати, и меня слушать тоже не надо, хе-хе. В общем, это все просто разговоры.
Re[5]: Порка: TestMeCode.com
От: Sharowarsheg  
Дата: 14.02.19 12:05
Оценка: +2
Здравствуйте, C0x, Вы писали:


C0x>Я просто прагматично тут пытаюсь оценить. Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.


Это только кажется. Много проектов выглядят, как сделанные командой разработчиков, а некоторые даже действительно сделаны командой разработчиков, а на самом деле там работы на год.
Re[5]: Порка: TestMeCode.com
От: rean  
Дата: 20.02.19 14:06
Оценка: 102 (1)
deleted2
Отредактировано 22.04.2019 8:51 deleted2 . Предыдущая версия . Еще …
Отредактировано 22.04.2019 8:33 deleted2 . Предыдущая версия .
Отредактировано 22.04.2019 8:33 deleted2 . Предыдущая версия .
Отредактировано 22.04.2019 8:08 deleted2 . Предыдущая версия .
Re[8]: Порка: TestMeCode.com
От: rudzuk  
Дата: 17.02.19 10:52
Оценка: 4 (1)
Здравствуйте, Unhandled_Exception, Вы писали:

UE> Любопытно, а чем сейчас покрытие считают для юнит тестов на дельфи?


https://sourceforge.net/projects/delphicodecoverage/
avalon/2.0.6
Re: Порка: TestMeCode.com
От: Sharowarsheg  
Дата: 14.02.19 09:13
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Представляю стартовый продукт для тестирования приложений http://TestMeCode.com

G>На сегодня поддержка только языка Delphi.

Дельфи. Ну, допустим. Лучше не допускать, конечно, но тем не менее.

G>Хочу сделать годовую подписку за 27-29 евро.


Как это сайт на русском, а цена в евро?

Английский сайт нужен.
Re: Порка: TestMeCode.com
От: falcoware Россия https://falcoware.com/rus/
Дата: 14.02.19 09:35
Оценка:
ИМХО, тулсы для разработчиков не взлетают. Кто тут ОКСЕТТУ делал и пролетел?
https://falcoware.com/rus/ — Бесплатные Игры!!!
Re: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 09:47
Оценка:
Здравствуйте, Garamzin, Вы писали:

Залей видос минут на 5 кратко показывающий что это такое вообще и кому оно нужно. Я в тестировании не первый день, но так и не понял что именно и как тестируется. Это типа аналог TestComplete?
Re: Порка: TestMeCode.com
От: Unhandled_Exception Россия  
Дата: 14.02.19 10:04
Оценка:
Здравствуйте, Garamzin, Вы писали:

G> [...]


Ясно, что продукт помогает тестировать, но о каком именно тестировании идет речь? Главная страница должна сразу "продавать".

Кто три твои главных конкурента? Посмотри, как сделаны их сайты.

Одно время я собирался делать аналог TestComplete для тестирования десктопа, но, пообщавшись с людьми, которые занимаются тестированием (рекомендую найти по linkedin хотя бы дюжину тестировщиков, которые возьмутся использовать продукт хотя бы забесплатно — да, удивительно, но даже бесплатный продукт приходится продавать, и это непросто) понял, что сейчас фокус в тестировании сильно сместился в сторону веба и mobile.
Re: Порка: TestMeCode.com
От: Khimik  
Дата: 14.02.19 11:11
Оценка:
Здравствуйте, Garamzin, Вы писали:

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

Вот картинка с вашего сайта:



Объясните на пальцах, что конкретно происходит в этом окне, если действительны вылавливаются баги в классе TCalc.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[2]: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 11:34
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Одно время я собирался делать аналог TestComplete для тестирования десктопа, но, пообщавшись с людьми, которые занимаются тестированием (рекомендую найти по linkedin хотя бы дюжину тестировщиков, которые возьмутся использовать продукт хотя бы забесплатно — да, удивительно, но даже бесплатный продукт приходится продавать, и это непросто) понял, что сейчас фокус в тестировании сильно сместился в сторону веба и mobile.


TestComplete умеет и с вэбом работать и смобайл вроде как. Там модули нужно ставить. А аналог это ты сильно махнул.
Re: Порка: TestMeCode.com
От: Nonmanual Worker  
Дата: 14.02.19 11:43
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Представляю стартовый продукт для тестирования приложений http://TestMeCode.com


Сам пользуешься своим изделием? Если честно я не понял какую проблему оно решает, хотя я разработчик.
Re[4]: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 12:01
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Здравствуйте, C0x, Вы писали:


C0x>>TestComplete умеет и с вэбом работать и смобайл вроде как.


U_E>Конечно, я с этим не спорю.


U_E>Я почитывал их форум, там тоже было ясно видно, что тестирование десктопных приложений составляет малую часть от всего объема тестирования. Предостерегаю топикстартера.


C0x>>А аналог это ты сильно махнул.


U_E>Хорошо, что я никогда не слушал никого, кто говорил мне, что "это глупо делать"


Я просто прагматично тут пытаюсь оценить. Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.
Re: Порка: TestMeCode.com
От: autopsist  
Дата: 14.02.19 12:05
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Представляю стартовый продукт для тестирования приложений http://TestMeCode.com


"Это комплекс утилит состоящий из функционала тестирования, помощи в отладке."
vs
"Комплекс состоит из утилит для функционального тестирования и помощи в отладке."

Я правильно перевел?

Из описания понял, что программа помогает. Но больше ничего не понял.
Как помогает? Что конкретно можно делать? Какие задачи решает и как именно (одно в связке с другим)?
Надо примеры. Да и видео бы не помешало с демонстрацией особо востребованных фич.
Но пока нет этого, хотябы фичи перечислил текстом по пунктам...

Вообще конечно сайт не продает от слова — совсем.
Ничего не понял, пошел в FAQ, Там я понял что тот, кто создал сайт или надо мной издевается или не хочет ничего продать.
Вам реально часто задают вопросы, которые указаны в FAQ? Издеваетесь?
Что? Сайт на русском а цена в евро? Точно издеваетесь...

Закрыл сайт, вернуться нет желания.
Re: Порка: TestMeCode.com
От: bnk СССР http://unmanagedvisio.com/
Дата: 14.02.19 12:14
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Представляю стартовый продукт для тестирования приложений http://TestMeCode.com


К сожалению, не понял, какую именно задачу тестирования продукт решает.
Разрабатываю софт уже довольно давно. Главная страница требует переработки, IMHO.

Пока впечатление от сайта такое, как будто динозавр, использующий Delphi в 2019 году, вылез из подвала и решил поробовать продать свои пожитки

G>Хочу посоветоваться:

G> 1. Что в первую очередь "причесать" для старта продаж?

Написать зачем и кому оно может пригодиться.

G> 2. Для приема денег выбрал PPG, но не знаю как интегрируется у них подписка и интересуют "подписочные" тарифы. Может есть другой регистратор специализирующийся на подписках?

G> 3. Для небольшой защиты использую VMProtect, но как использовать это в подписке, еще не продумал.

PPG поддерживает подписки, почитай их доки, или напиши им в саппорт, должны помочь.

G> 4. Что делать с форумом? Был форум, утонул в спаме. Какими движками пользуйтесь? Как минимизировать спам? Как первом этапе защитить форум от спамеров, без мониторинга 24х7.


Этот вопрос на старте вообще не актуален. То есть, форум не нужен.
Он имеет смысл, если у продукта уже есть заметное коммьюнити.
Иначе поддержки достаточно.
Re[6]: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 12:17
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Здравствуйте, C0x, Вы писали:



C0x>>Я просто прагматично тут пытаюсь оценить. Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.


S>Это только кажется.



Я точно это знаю. Лет 10 ими пользуюсь, давно (еще до покупкой их американцами) с ними общался.

S>Много проектов выглядят, как сделанные командой разработчиков, а некоторые даже действительно сделаны командой разработчиков, а на самом деле там работы на год.


Как думаешь:
1. Сколько у тебя займет написать более-менее внятный редактор javascript, vbscript, python script?
2. Сколько у тебя займет времени Дебаггер написать для перечисленных выше языков.
3. Сколько у тебя займет времени написать извлечения дерева контролов из MFC приложения? (я им для этого пользовался, сейчас для WPF).
4. Сколько для WPF?
5. Запись сценариев, проигрывание.
...
...


По моему годом тут не пахнет.
Re[7]: Порка: TestMeCode.com
От: Sharowarsheg  
Дата: 14.02.19 12:24
Оценка:
Здравствуйте, C0x, Вы писали:

S>>Это только кажется.


C0x>Я точно это знаю. Лет 10 ими пользуюсь, давно (еще до покупкой их американцами) с ними общался.


А я такие писал, для внутреннего пользования, когда работал в конторе. Нихрена там сложного нет.

S>>Много проектов выглядят, как сделанные командой разработчиков, а некоторые даже действительно сделаны командой разработчиков, а на самом деле там работы на год.


C0x>Как думаешь:

C0x>1. Сколько у тебя займет написать более-менее внятный редактор javascript, vbscript, python script?
C0x>2. Сколько у тебя займет времени Дебаггер написать для перечисленных выше языков.

Почему ты думаешь, что у них это всё внятное? Я помню, когда я пользовался им, я только матерился, там где была необходимость писать что-то на языках внтури этой штуки. Это, может, года четыре назад было, может пять. Может, с тех пор исправили, но я уже им не пользуюсь. Проще взять или Lua, или C# сразу, и позволить нормальные плагины подключать. В этом Testcomplete единственно работавший и не падавший способ что-то сделать кастомное был написать экзешник и шеллом вызывать его.

Такую штуку написать можно за месяц без проблем, с той надёжностью, которая тогда была, а на самом деле проще интерфейсы наружу выставить и дать всем писать на своих языках.

C0x>3. Сколько у тебя займет времени написать извлечения дерева контролов из MFC приложения? (я им для этого пользовался, сейчас для WPF).


Недели за три я писал, ничего сложного. Сиди да извлекай. Это, кстати, недели три вместе с записью и проигрыванием кликов.

C0x>4. Сколько для WPF?


Не знаю, не пробовал.

C0x>5. Запись сценариев, проигрывание.


Это вообще мура.
Отредактировано 14.02.2019 12:30 Sharowarsheg . Предыдущая версия .
Re[6]: Порка: TestMeCode.com
От: bnk СССР http://unmanagedvisio.com/
Дата: 14.02.19 12:32
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Здравствуйте, C0x, Вы писали:



C0x>>Я просто прагматично тут пытаюсь оценить. Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.


S>Это только кажется. Много проектов выглядят, как сделанные командой разработчиков, а некоторые даже действительно сделаны командой разработчиков, а на самом деле там работы на год.


Делали не в Москве кстати, а в провинции, бе-бе-бе Разработчикам — респект и уважуха
Но это было фиг знает сколько лет назад, когда он еще 300 баксов стоил
Re[8]: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 12:57
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:


S>В этом Testcomplete единственно работавший и не падавший способ что-то сделать кастомное был написать экзешник и шеллом вызывать его.


Согласен, работало криво очень часто, дебаггером было сложно пользоваться. Сейчас намного лучше. Но может потому-что это просто тяжело сделать? А так-то можно и Visual Studio за месяц запилить, только она скорее всего падать будет на каждом втором клике. Вообще написать решение и написать хорошо работающее решение это задачи разного уровня сложности.

S> а на самом деле проще интерфейсы наружу выставить и дать всем писать на своих языках.


У них есть такое, называется Connected Apps. Я кстати, только им и пользуюсь. У меня связка: Visual Studio/C#/SpecFlow/NUnit + Connected Apps для использования TestComplete прямо в сценарии тестов, написанных на C#, в ситуациях когда UI нужно дергать.

Но тут есть одна загвоздка с точки зрения бизнеса, т.к. они почему-то отказываются от этого решения (поэтому мне пришлось крякнуть их dll и добавить поддержку MSVS 2017, в оригенале её нет) и делают ставку на свою студию.
Re[5]: Порка: TestMeCode.com
От: Unhandled_Exception Россия  
Дата: 14.02.19 13:19
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Поэтому тебе нужна как минимум комманда таких же крутых спецов.


Кстати, у многих шароварщиков есть истории, когда на том конце провода думали, что тут прям целая команда сидит.
Re[9]: Порка: TestMeCode.com
От: Sharowarsheg  
Дата: 14.02.19 13:31
Оценка:
Здравствуйте, C0x, Вы писали:

S>>В этом Testcomplete единственно работавший и не падавший способ что-то сделать кастомное был написать экзешник и шеллом вызывать его.


C0x>Согласен, работало криво очень часто, дебаггером было сложно пользоваться. Сейчас намного лучше. Но может потому-что это просто тяжело сделать?


Ну, если не делать то, что тяжело, то и денег не получишь. Конечно, тяжело. Глупо было бы сделать калькулятор и думать о миллионе.

S>> а на самом деле проще интерфейсы наружу выставить и дать всем писать на своих языках.


C0x>Но тут есть одна загвоздка с точки зрения бизнеса, т.к. они почему-то отказываются от этого решения (поэтому мне пришлось крякнуть их dll и добавить поддержку MSVS 2017, в оригенале её нет) и делают ставку на свою студию.


Vendor lock-in это называется, скорее всего. Или просто в этой теме делать больше нечего, кроме как пилить студию, что тоже очень может быть. Для десяти человек в нише TestComplete тупо нет работы на 15 лет (или сколько им там? они же вроде начинали как AutomatedQA, если я не путаю).
Re[10]: Порка: TestMeCode.com
От: C0x  
Дата: 14.02.19 13:42
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Здравствуйте, C0x, Вы писали:


S>>>В этом Testcomplete единственно работавший и не падавший способ что-то сделать кастомное был написать экзешник и шеллом вызывать его.


C0x>>Согласен, работало криво очень часто, дебаггером было сложно пользоваться. Сейчас намного лучше. Но может потому-что это просто тяжело сделать?


S>Ну, если не делать то, что тяжело, то и денег не получишь. Конечно, тяжело. Глупо было бы сделать калькулятор и думать о миллионе.


S>>> а на самом деле проще интерфейсы наружу выставить и дать всем писать на своих языках.


C0x>>Но тут есть одна загвоздка с точки зрения бизнеса, т.к. они почему-то отказываются от этого решения (поэтому мне пришлось крякнуть их dll и добавить поддержку MSVS 2017, в оригенале её нет) и делают ставку на свою студию.


S>Vendor lock-in это называется, скорее всего. Или просто в этой теме делать больше нечего, кроме как пилить студию, что тоже очень может быть.


Просто они поняли что продукт нужно делать для менее квалифицированных автотестеров. У нас например в конторе тестеры, вообще программировать никак никогда. А вот после того как в Тесткомплите появилось Human Readable запись сценариев без скриптов (они под капотом), то уже начинают присматриваться.


S>Для десяти человек в нише TestComplete тупо нет работы на 15 лет (или сколько им там? они же вроде начинали как AutomatedQA, если я не путаю).


TestComplete раньше был основной продукт. Сейчас это мелкая часть: http://skrinshoter.ru/s/140219/m6Oc6Qcl?a
Re[11]: Порка: TestMeCode.com
От: Sharowarsheg  
Дата: 14.02.19 13:49
Оценка:
Здравствуйте, C0x, Вы писали:

S>>Для десяти человек в нише TestComplete тупо нет работы на 15 лет (или сколько им там? они же вроде начинали как AutomatedQA, если я не путаю).


C0x>TestComplete раньше был основной продукт. Сейчас это мелкая часть: http://skrinshoter.ru/s/140219/m6Oc6Qcl?a


Да, и вот на это всё 150 человеко-лет мне представляется избыточным.
Re[5]: Порка: TestMeCode.com
От: icezone  
Дата: 14.02.19 15:02
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.


у меня прямо сейчас две либы, созданные профессионалами, за большие деньги
судя по исходникам это писали студенты в ночь перед зачетом
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 14.02.19 18:29
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, Garamzin, Вы писали:


C0x>Залей видос минут на 5 кратко показывающий что это такое вообще и кому оно нужно.

C0x> Я в тестировании не первый день, но так и не понял что именно и как тестируется.
Все это есть, поправил ссылку, на главной под картинкой.
Подробнее

C0x> Это типа аналог TestComplete?

Да, подобное.
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 14.02.19 18:29
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

NW>Сам пользуешься своим изделием? Если честно я не понял какую проблему оно решает, хотя я разработчик.


Конечно.

Сейчас в продукте 2 функционала:
1. TestCode — тестирование кода. Проверка алгоритмов кода.
2. TestSend — получение отладочной информации.
В первом сообщении я более подробно написал.
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 14.02.19 18:29
Оценка:
Здравствуйте, autopsist, Вы писали:

A>"Это комплекс утилит состоящий из функционала тестирования, помощи в отладке."

A>vs
A>"Комплекс состоит из утилит для функционального тестирования и помощи в отладке."

Спасибо, заменил )

A>Надо примеры. Да и видео бы не помешало с демонстрацией особо востребованных фич.

A>Но пока нет этого, хотябы фичи перечислил текстом по пунктам...
Под картинками ссылка "Подробнее".
Получается ее совсем не видно?
Переместил над картинкой.

A>Что? Сайт на русском а цена в евро? Точно издеваетесь...

Сайт для "порки" только на русском языке, в стартовом сообщении я написал, что он будет как минимум еще на английском, но хочу сделать для 4-5 языков.
Отредактировано 14.02.2019 19:25 Garamzin . Предыдущая версия .
Re: Порка: TestMeCode.com
От: 129912 Марс  
Дата: 14.02.19 20:10
Оценка:
G> 1. Что в первую очередь "причесать" для старта продаж?

Сделайте видеролик на 5-10 минут. Покажите работу программы, её основные возможности.

А пока совершенно непонятно, что делает программа и как она поможет пользователю.
Re: Порка: TestMeCode.com
От: drVanо Россия https://vmpsoft.com
Дата: 15.02.19 07:19
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Хочу посоветоваться:

G> 1. Что в первую очередь "причесать" для старта продаж?
G> 2. Для приема денег выбрал PPG, но не знаю как интегрируется у них подписка и интересуют "подписочные" тарифы. Может есть другой регистратор специализирующийся на подписках?
G> 3. Для небольшой защиты использую VMProtect, но как использовать это в подписке, еще не продумал.
G> 4. Что делать с форумом? Был форум, утонул в спаме. Какими движками пользуйтесь? Как минимизировать спам? Как первом этапе защитить форум от спамеров, без мониторинга 24х7.

Посоветую для начала купить свою лицензию на VMProtect, а не пользоваться чужой.
Отредактировано 15.02.2019 7:24 drVanо . Предыдущая версия .
Re[6]: Порка: TestMeCode.com
От: C0x  
Дата: 15.02.19 09:02
Оценка:
Здравствуйте, icezone, Вы писали:

I>Здравствуйте, C0x, Вы писали:


C0x>>Тесткомплит создавался в России, коммандой очень крутых разработчиков. Поэтому тебе нужна как минимум комманда таких же крутых спецов.


I>у меня прямо сейчас две либы, созданные профессионалами, за большие деньги

I>судя по исходникам это писали студенты в ночь перед зачетом

Что за либы если не секрет? Как проводишь оценку кода?

Была такая игра Duke Nukem 3D. Написал движок (самый передовой на то время) вот Сильверман Кен.
Мало того что он Дюка написал, так он еще до сих пор такие вещи на чистом ASM фигачит в свободное время, например воксельный движок, который летает без всяких 3D карт. А это я к тому, что те кто, смотрят на код Дюка Нюкема, ахреневают и говорят "Это что за п**ц???" и не могут вообще понять че там вообще написано.
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 15.02.19 10:47
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Посоветую для начала купить свою лицензию на VMProtect, а не пользоваться чужой.


Вань, да я у тебя покупал несколько раз, первую версию из рук в руки от тебя получил в Екб
Правда да-а-авно это было.
Re[3]: Порка: TestMeCode.com
От: drVanо Россия https://vmpsoft.com
Дата: 15.02.19 11:12
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Вань, да я у тебя покупал несколько раз, первую версию из рук в руки от тебя получил в Екб

G>Правда да-а-авно это было.

Ну вот ей и пользуйся, а друзей из Архи-Техно зачем подставлять?
Re[4]: Порка: TestMeCode.com
От: Garamzin  
Дата: 15.02.19 11:23
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Ну вот ей и пользуйся, а друзей из Архи-Техно зачем подставлять?



Напиши в плиз в личку.
Не понял, что за "друзей из Архи-Техно" и в чем подстава?
Re[5]: Порка: TestMeCode.com
От: drVanо Россия https://vmpsoft.com
Дата: 15.02.19 11:44
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Напиши в плиз в личку.

G>Не понял, что за "друзей из Архи-Техно" и в чем подстава?

Написал.
Re[7]: Порка: TestMeCode.com
От: icezone  
Дата: 15.02.19 21:03
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Что за либы если не секрет? Как проводишь оценку кода?


хотел в подробностях расписать, но проблема более общая
за последние два года я перебирал десятки библиотек — опенсорс, коммерческие, с закрытими исходниками
результат везде один — либо глючный спагетти-код, либо тормозной академический стиль, в котором авторы плодят лишние сущности
поэтому пред покупкой рекомендую глянуть исходники, пусть даже пиратские, чтобы потом не обжечься
Re[2]: Порка: TestMeCode.com
От: swame  
Дата: 16.02.19 09:14
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, Garamzin, Вы писали:


C0x>Залей видос минут на 5 кратко показывающий что это такое вообще и кому оно нужно. Я в тестировании не первый день, но так и не понял что именно и как тестируется. Это типа аналог TestComplete?


Это аналог не TestComplete а DUnit. Зачем автор написал второй DUnit, объяснить не может.
Re[3]: Порка: TestMeCode.com
От: C0x  
Дата: 16.02.19 09:16
Оценка:
Здравствуйте, swame, Вы писали:

S>Это аналог не TestComplete а DUnit. Зачем автор написал второй DUnit, объяснить не может.


Конкуренция всегда хорошо.
Re[4]: Порка: TestMeCode.com
От: swame  
Дата: 16.02.19 09:31
Оценка:
Здравствуйте, C0x, Вы писали:

C0x>Здравствуйте, swame, Вы писали:


S>>Это аналог не TestComplete а DUnit. Зачем автор написал второй DUnit, объяснить не может.


C0x>Конкуренция всегда хорошо.


Да пусть, мне не жалко.
Просто склонировать 20 — летнего возраста опенсорсный продукт, а теперь еще просить за него деньги — я в недоумении.
Re[5]: Порка: TestMeCode.com
От: C0x  
Дата: 16.02.19 09:35
Оценка:
Здравствуйте, swame, Вы писали:

S>Здравствуйте, C0x, Вы писали:


C0x>>Здравствуйте, swame, Вы писали:


S>>>Это аналог не TestComplete а DUnit. Зачем автор написал второй DUnit, объяснить не может.


C0x>>Конкуренция всегда хорошо.


S>Да пусть, мне не жалко.

S>Просто склонировать 20 — летнего возраста опенсорсный продукт, а теперь еще просить за него деньги — я в недоумении.

А вдруг он вдохнет в него новую жизнь! А если просит деньги то обязан значит саппорт обеспечивать, баги фиксить, фичи добавлять. Деньги это ответственность.
Re: Порка: TestMeCode.com
От: cjazz  
Дата: 16.02.19 10:25
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Хочу посоветоваться:

G> 1. Что в первую очередь "причесать" для старта продаж?

Сделать современный сайт. Необязательно с супер дизайном, можно на обычном Bootstrap шаблоне, который будет выглядеть привычно для посетителей.
Заменить иконки в программе на современные, еще можно добавить dark theme.
Название довольно странное — Test me, Code? Если TestMyCode.com занят, то лучше придумать что-нибудь другое.

.
Re[8]: Порка: TestMeCode.com
От: bnk СССР http://unmanagedvisio.com/
Дата: 16.02.19 10:32
Оценка:
Здравствуйте, icezone, Вы писали:

I>Здравствуйте, C0x, Вы писали:


C0x>>Что за либы если не секрет? Как проводишь оценку кода?


I>хотел в подробностях расписать, но проблема более общая

I>за последние два года я перебирал десятки библиотек — опенсорс, коммерческие, с закрытими исходниками
I>результат везде один — либо глючный спагетти-код, либо тормозной академический стиль, в котором авторы плодят лишние сущности
I>поэтому пред покупкой рекомендую глянуть исходники, пусть даже пиратские, чтобы потом не обжечься

Ну, любая немецкая машина к пенсии превращается в Опель Может просто у тебя ожидания завышены?
Imho, писателям опенсорсных библиотек, у которых есть заметное комьюнити, памятники надо ставить а не критиковать.
Код, который "обнять и плакать", не так уж и часто попадается..
Re: Порка: TestMeCode.com
От: LaptevVV Россия  
Дата: 16.02.19 13:20
Оценка:
G>Представляю стартовый продукт для тестирования приложений http://TestMeCode.com
G>На сегодня поддержка только языка Delphi.
G>Но возможно использовать в языках C++,C#,Basic , ну и любые с использованием СОМ интерфейса.
G>Для этого нужно переписать демо примеры и добавить в документацию.
Для С++ не взлетит.
Юнит-тестирование в С++ уже довольно давно выполняется с помощью include-систем.
Ничего устанавливать не требуется, подключаешь нужный файл — и пиши себе юнит-тесты.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Порка: TestMeCode.com
От: Аноним  
Дата: 16.02.19 16:43
Оценка:
Здравствуйте, swame, Вы писали:

S>Просто склонировать 20 — летнего возраста опенсорсный продукт, а теперь еще просить за него деньги — я в недоумении.


Брррр, Вы о чем?
Вы тестированием занимались?
DUnit пользовались? Тесты САМИ делали?
Много общего?
Единственное, что на мой взгляд общего это фраза: "тестирование units" — Все!!!
В TestCode нет не только не одной строчки, даже символа из DUnit.
Но то, что для меня самое важно и почему я написал этот продукт и пользуюсь сам уже очень много лет, это то что он создан абсолютно по другим принципам.
И если Вы занимались тестированием, это сразу видно.
Я этот продукт делал в первую очередь для себя.
И написал его т.к. как раз DUnit и другие продукты тестирования, на тот момент, мне не давали тех возможностей, которые я хотел.
Где Вы там нашли обшее с DUnit я не представляю.
И тем более, на каком основании обвинять в плагиате, основываясь только на том, что продукт тоже тестирует код?

Так что могу процитировать Вас самих:
S> — я в недоумении.



Vladimir Garamzin
Отредактировано 16.02.2019 16:45 Garamzin . Предыдущая версия . Еще …
Отредактировано 16.02.2019 16:44 Garamzin . Предыдущая версия .
Re[6]: Порка: TestMeCode.com
От: swame  
Дата: 16.02.19 19:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, swame, Вы писали:


S>>Просто склонировать 20 — летнего возраста опенсорсный продукт, а теперь еще просить за него деньги — я в недоумении.


А>Вы тестированием занимались?


Занимался и продолжаю. Но я не тестер.

А>DUnit пользовались? Тесты САМИ делали?


Тесты для DUnit САМ делал

А>Много общего?


Принцип идентичный. Реализации разные.

А>Единственное, что на мой взгляд общего это фраза: "тестирование units" — Все!!!

А>В TestCode нет не только не одной строчки, даже символа из DUnit.

Верю.

А>Но то, что для меня самое важно и почему я написал этот продукт и пользуюсь сам уже очень много лет, это то что он создан абсолютно по другим принципам.

А>И если Вы занимались тестированием, это сразу видно.

А>Я этот продукт делал в первую очередь для себя.


Так уже есть еще хоть 1 пользователь?

А>И написал его т.к. как раз DUnit и другие продукты тестирования, на тот момент, мне не давали тех возможностей, которые я хотел.


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

А>Где Вы там нашли обшее с DUnit я не представляю.


Вижу только 2 различия
1. Движок тестирования вынесен в отдельное приложение — но это только недостаток.
2. Несколько более удобный синтаксис записи тестов по сравнению с DUnit.
Этого можно было бы достичь хелпером на несколько десятков строк.

Про отладочные сообщения ничего не говорю — это вообще отдельный продукт, непонятно зачем он объединен c юнит тестированием.
Известный, но несравнимо более зрелый аналог — CodeSite.

А>И тем более, на каком основании обвинять в плагиате, основываясь только на том, что продукт тоже тестирует код?


Ни в коем случае не обвиняю в плагиате — ведь не обвиняют же друг друга разработчики разных компиляторов С.

А>Так что могу процитировать Вас самих:

S>> — я в недоумении.
А>


А>Vladimir Garamzin
Re[9]: Порка: TestMeCode.com
От: icezone  
Дата: 16.02.19 22:46
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Ну, любая немецкая машина к пенсии превращается в Опель Может просто у тебя ожидания завышены?


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

bnk>Imho, писателям опенсорсных библиотек, у которых есть заметное комьюнити, памятники надо ставить а не критиковать.


я опенсорс уже давно избегаю, основные претензии к коммерческим продуктам

bnk>Код, который "обнять и плакать", не так уж и часто попадается..


у меня ниша узкая, поэтому выбор невелик
Re[7]: Порка: TestMeCode.com
От: Garamzin  
Дата: 17.02.19 07:56
Оценка:
Здравствуйте, swame, Вы писали:

А>>DUnit пользовались? Тесты САМИ делали?

S>Тесты для DUnit САМ делал

Очень хорошо!
Попробуйте только на одну функцию сделать тест с помощью TestCode и сравнить с DUnit.
Если Вы регулярно делайте тесты, Вы увидите отличие.
Кроме этого 100 параметров, без покупки, вполне хватит для тестирования небольшого приложения.
Для полного, профессионального тестирования это конечно же мало, так как тесты в дальнейшем накладываются на все и вся.
Но для ознакомления или на первом этапе, вполне хватит.
Re[8]: Порка: TestMeCode.com
От: swame  
Дата: 17.02.19 09:04
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Здравствуйте, swame, Вы писали:


А>>>DUnit пользовались? Тесты САМИ делали?

S>>Тесты для DUnit САМ делал

G>Очень хорошо!

G>Попробуйте только на одну функцию сделать тест с помощью TestCode и сравнить с DUnit.
G>Если Вы регулярно делайте тесты, Вы увидите отличие.
G>Кроме этого 100 параметров, без покупки, вполне хватит для тестирования небольшого приложения.
G>Для полного, профессионального тестирования это конечно же мало, так как тесты в дальнейшем накладываются на все и вся.
G>Но для ознакомления или на первом этапе, вполне хватит.

Вот пример типичного рутинного теста из моего кода сложнее калькулятора.
Как бы он выглядел в вашей системе?
Насколько проще?
Хотя бы на 20%?
Ладно, на 10%?

  Код 1

function TTestBlocking.FindBlocking (const ABlockedKey, ABlockingKey, Msg: string;
  var VBlocked, VBlocking: TVectorView; bExists : boolean = true): TBlockingInfo;
begin
  VBlocked :=  (Scheme.FindLUni (ABlockedKey)  as TNamedBlock).VOwnerFirst as TVectorView;
  VBlocking := (Scheme.FindLUni (ABlockingKey) as TNamedBlock).VOwnerFirst as TVectorView;
  CheckTrue (Assigned (VBlocked)); CheckTrue (Assigned (VBlocking), Msg + '.0');
  Result := GetBlockingInfo(Scheme).FindBindingByID (VBlocked.TechMain.RTID, VBlocking.TechMain.RTID) as TBlockingInfo;
  CheckTrue (Assigned (Result)= bExists, Msg + '.1');
end;

procedure TTestBlocking.TestBlocked (Bi: TBlockingInfo; const Msg: string;
  BlockedBlocked, BlockingBlocked: boolean);
var
  B : boolean;
begin
  //B := BI.BlkisBlocked;
  B := BI.IsViewLocked2(nil, BI.FirstLink.Obj as TNamedBlock, DevNull_Str);
  CheckTrue ( B = BlockedBlocked, Msg + '.1\');

  //B := BI.CtlisBlocked;
  B := BI.IsViewLocked2(nil, BI.SecondLink.Obj as TNamedBlock, DevNull_Str);
  CheckTrue ( B = BlockingBlocked, Msg + '.2');

end;

procedure TTestBlocking.Test_Imer_CreateBlockingsWikat;
var
  VC : array [0..3] of TVectorView;
  LB : TBlockingInfo;
begin
  OpenFile (1);
  {выкатной выключатель}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206',
                      'Test_CreateBlockings 2.1');
  TestBlocked (LB, 'Test_CreateBlockings 2.1.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.1.12');

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.1.13', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
  end;
  {}

  LB := FindBlocking ('ПС_Имелетинская_ЗН_СВ-43_10_кВ', 'ПС_Имелетинская_СВ_43_10_кВ',
                      'Test_CreateBlockings 2.2');
  TestBlocked (LB, 'Test_CreateBlockings 2.2.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.2.12');
  VC[0] := (Scheme.FindLUni ('#1142\\\Схема\СП 3 С СВ 43 10 кВ') as TnamedBlock).VrepFirst as TVectorView;

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  (VC[0] as TShassi).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.2.13.1', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
    (VC[0] as TShassi).TrolleyState := tsWork;
  end;

  {На секции 6-10 кВ если для ячеек потребителей не создавать блок с ЗН на секции}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_1_С_Т-1',
                      'Test_CreateBlockings 2.3.1', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', '#1143\\\Схема\полушасси[1]',
                      'Test_CreateBlockings 2.3.2', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', '#1141\\\Схема\СП 1 С СВ 21 10 кВ',
                      'Test_CreateBlockings 2.3.3', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_ТСН-1',
                      'Test_CreateBlockings 2.3.4', true);

  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им101',
                      'Test_CreateBlockings 2.3.5', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им103',
                      'Test_CreateBlockings 2.3.6', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им105',
                      'Test_CreateBlockings 2.3.7', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им107',
                      'Test_CreateBlockings 2.3.8', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им109',
                      'Test_CreateBlockings 2.3.9', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им111',
                      'Test_CreateBlockings 2.3.10', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им113',
                      'Test_CreateBlockings 2.3.11', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им115',
                      'Test_CreateBlockings 2.3.12', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_ДГР-1',
                      'Test_CreateBlockings 2.3.13', false);

  {блокировка с тележкой автомата}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ_ТСН-2', 'ПС_Имелетинская_АВ_0,4_кВ_ТСН-2',
                      'Test_CreateBlockings 2.4.1', true);

  {блокировк c  ВКЛ только рядом расположенного }
  LB := FindBlocking ('ПС_Имелетинская_ЗН_БСК-1', 'ПС_Имелетинская_В_10_кВ_БСК-1',
                      'Test_CreateBlockings 2.4.1', false);

end;


  Код 2
unit Protokol_Test;

interface

uses
  SysUtils, math,
  TestFramework, TypeViewsBuilder, SDETask3, SDETask.Run, Blank.Constant, Blank.Operation;

type
  TTestProtokol = class(TTestCase)
  private
    B: TViewsBuilder;
    procedure Setup10;
  protected
    procedure SetUp; override;
    procedure TearDown; override;
    function Task: TSDETaskRun;
    function Protokol: TSDETask;
    function MergedProtokol: TSDETask;
    function PrintAStatus (const A: array of TScheduleStatus): string;
    function PrintAсts (const A: array of integer): string;
    function PrintTask (ATask: TSDETask): string;
    procedure CheckMaxRate (Rate: integer);
    procedure CheckRate (Rate: integer);
    procedure CheckProtokol (Acts: array of integer; Schedule: array of TScheduleStatus; MaxRate, Rate: integer);
  public
    procedure AddCommand (ATask: TSDETask; Acts: array of integer); overload;
    function AddCommand (ATaskNode: TTaskNode; Act: integer): TSDEOperation3; overload;
    function AddAltNode (AlterOrder: TAlterOrder): TAltTaskNode;
    procedure RenderTask (ATask: TSDETask);
    procedure CheckCommand (ATask: TSDETask; Acts: array of integer);
    procedure CheckSchedule (ATask: TSDETask; Acts: array of TScheduleStatus);
    procedure CheckInvertCount (ATask: TSDETask; N: integer; Up: boolean; Cnt: integer);
  published
    procedure Test_Normal;
    procedure Test_Miss_1;
    procedure Test_Miss_3;
    procedure Test_Miss_4;
    procedure Test_Unecessary_1;
    procedure Test_Unecessary_2;
    procedure Test_Replace;
    procedure Test_Repeat;
    procedure Test_Other;
    procedure Test_Groups;
    procedure Test_Early_1;
    procedure Test_Early_2;
    procedure Test_Early_4;
    procedure Test_Early_5;
    procedure Test_Alt_Any_1;
    procedure Test_Alt_All_1;
    procedure Test_Alt_Strict_1;
    procedure Test_Alt_Order_1;
    procedure Test_Alt_Alternate_1;
    procedure Test_Alt_Alternate_2;
  end;

const
  N = ssNormal;
  M = ssMiss;
  U = ssUnecessary;
  E = ssEarly;
  L = ssLate;

SScheduleStatus : array [TScheduleStatus] of string = ('N', 'M', 'U', 'E', 'L','M');


implementation

uses
  Common,
  SWApplication, IFaceForms, Views0, Constan, FloatType, PageList, Blanks_Form, Views0.Constant;

{ TTestProtokol }

procedure TTestProtokol.SetUp;
begin
  inherited;
  Setup10;
end;

procedure TTestProtokol.TearDown;
begin
  inherited;

end;

function TTestProtokol.Task: TSDETaskRun;
begin
  //Result := frmBlanksForm.frmBlankEditor.Task as TSDETaskRun;
  Result := Tasks.CurrentTask;
end;

function TTestProtokol.Protokol: TSDETask;
begin
  //Result := (frmBlanksForm.frmBlankEditor.Task as TSDETaskRun).Protokol;
  Result := Tasks.CurrentTask.CheckProtokol;
end;

function TTestProtokol.MergedProtokol: TSDETask;
begin
  //Result := (frmBlanksForm.frmBlankEditor.Task as TSDETaskRun).MergedProtokol;
  Result := Tasks.CurrentTask.CheckMergedProtokol;
end;

procedure TTestProtokol.Test_Normal;
begin
  {совпадает протокол и бланк}
  AddCommand(Task, [1, 2, 3, 4, 5]);
  CheckCommand (Task, [1,2,3,4,5]);
  AddCommand(Protokol, [1, 2, 3, 4, 5]);
  CheckCommand (Protokol, [1,2,3,4,5]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5]);
  CheckSchedule (MergedProtokol, [N, N, N, N, N]);
  CheckRate (11111);
  CheckMaxRate (11111);
end;

procedure TTestProtokol.Test_Miss_1;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  AddCommand(Protokol, [2, 3, 4, 5]);
  Task.LinkProtokol;
  Task.MergeProtokol.Render;
  //frmBlanksForm.frmProtokol.RenderBlank(MergedProtokol);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5]);
  CheckSchedule(MergedProtokol, [M, N, N, N, N]);
  CheckMaxRate (11111);
  CheckRate (11110);
end;

procedure TTestProtokol.Test_Miss_3;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  {пропущенные действия}
  AddCommand(Protokol, [1, 2, 4, 5]);
  Task.LinkProtokol;
  Task.MergeProtokol.Render;
  //frmBlanksForm.frmProtokol.RenderBlank(MergedProtokol);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5]);
  CheckSchedule (MergedProtokol, [N, N, M, N, N]);
  CheckMaxRate (11111);
  CheckRate (11011);
end;

procedure TTestProtokol.Test_Miss_4;
begin
  AddCommand(Task, [1, 2, 3, 4, 5, 1]);
  {пропущенные действия}
  AddCommand(Protokol, [1, 2, 3, 4, 5]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 3, 4, 5]);
  CheckSchedule (Protokol, [N, N, N, N, N, M]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 1]);
  CheckSchedule (MergedProtokol, [N, N, N, N, N, M]);
  CheckMaxRate (11112);
  CheckRate (011111);
end;

procedure TTestProtokol.Test_Unecessary_1;
begin
  AddCommand(Task, [1, 2, 3, 4, 5, 1]);
  {лишние действия}
  AddCommand(Protokol, [1, 2, 3, 4, 5, 6]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 3, 4, 5, 6]);
  CheckSchedule (Protokol, [N, N, N, N, N, U]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 6]);
  CheckSchedule (MergedProtokol, [N, N, N, N, N, U]);
  CheckMaxRate (11112);
  CheckRate (011111);
end;

procedure TTestProtokol.Test_Unecessary_2;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  {лишние действия}
  AddCommand(Protokol, [1, 2, 3, 4, 5, 1]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 3, 4, 5, 1]);
  CheckSchedule (Protokol, [N, N, N, N, N, U]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 1]);
  CheckSchedule (MergedProtokol, [N, N, N, N, N, U]);
  CheckMaxRate (11111);
  CheckRate (11111);
end;

procedure TTestProtokol.Test_Replace;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  {лишние действия}
  AddCommand(Protokol, [1, 2, 6, 4, 5]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 6, 4, 5]);
  CheckSchedule (Protokol, [N, N, U, N, N]);
  CheckCommand(MergedProtokol, [1, 2, 3, 6, 4, 5]);
  CheckSchedule (MergedProtokol, [N, N, M, U, N, N]);
  CheckMaxRate (11111);
  CheckRate (11011);
end;

procedure TTestProtokol.Test_Repeat;
begin
  AddCommand(Task, [1, 1, 1, 1, 1]);
  {лишние действия}
  AddCommand(Protokol, [1]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1]);
  CheckSchedule (Protokol, [N]);
  CheckCommand(MergedProtokol, [1, 1, 1, 1, 1]);
  CheckSchedule (MergedProtokol, [N, M, M, M, M]);
  CheckMaxRate (5);
  CheckRate (1);
end;

procedure TTestProtokol.Test_Other;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  {лишние действия}
  AddCommand(Protokol, [6]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [6]);
  CheckSchedule (Protokol, [U]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 6]);
  CheckSchedule (MergedProtokol, [M, M, M, M, M, U]);
  CheckMaxRate (11111);
  CheckRate (0);
end;

procedure TTestProtokol.Test_Groups;
begin
  AddCommand(Task, [1, 2, 3, 4, 5, 3]);
  {лишние действия}
  AddCommand(Protokol, [1, 2, 4, 5, 3]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 4, 5, 3]);
  CheckSchedule (Protokol, [N, N, N, N, N]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 3]);
  CheckSchedule (MergedProtokol, [N, N, M, N, N, N]);

  AddCommand(Protokol, [1, 2, 3, 4, 5, 3]);
  Task.LinkProtokol;
  Task.MergeProtokol;
  CheckCommand(Protokol, [1, 2, 3, 4, 5]);
  CheckSchedule (Protokol, [N, N, N, N, N]);
  CheckCommand(MergedProtokol, [1, 2, 3, 4, 5, 3]);
  CheckSchedule (MergedProtokol, [N, N, N, N, N, M]);
end;

procedure TTestProtokol.Test_Early_1;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  AddCommand(Protokol, [3, 1, 2, 4, 5]);
  Task.LinkProtokol;
  CheckInvertCount(Protokol, 0, false, 2);
  CheckInvertCount(Protokol, 1, true, 1);
  Task.CalcSchedule;
  CheckSchedule(Protokol, [E, N, N, N, N]);
  CheckMaxRate (11111);
  CheckRate (11011);
end;

procedure TTestProtokol.Test_Early_2;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  AddCommand(Protokol, [1, 3, 2, 4, 5]);
  Task.CalcSchedule;
  CheckSchedule(Protokol, [N, E, N, N, N]);
  CheckMaxRate (11111);
  CheckRate (11011);
end;

procedure TTestProtokol.Test_Early_4;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  AddCommand(Protokol, [1, 2, 4, 3, 5]);
  Task.CalcSchedule;
  CheckSchedule (Protokol, [N, N, E, N, N]);
  Protokol.Render;
  //frmBlanksForm.frmProtokol.RenderBlank(Protokol);
  CheckMaxRate (11111);
  CheckRate (10111);
end;

procedure TTestProtokol.Test_Early_5;
begin
  AddCommand(Task, [1, 2, 3, 4, 5]);
  AddCommand(Protokol, [1, 2, 4, 5, 3]);
  Task.CalcSchedule;
  CheckSchedule (Protokol, [N, N, N, N, L]);
  //frmBlanksForm.frmProtokol.RenderBlank(Protokol);
  Protokol.Render;
  CheckMaxRate (11111);
  CheckRate (11011);
end;

function TTestProtokol.AddAltNode (AlterOrder: TAlterOrder): TAltTaskNode;
var
  AN: TAltTaskNode;
  Op1, Op2: TSDEOperation3;
begin
  Task.Clear;
  AN := Task.Operations.AddNodeN ('AltNode', TAltTaskNode) as TAltTaskNode;
  AN.AlterOrder := AlterOrder;
  Op1 := AddCommand (AN, 1);
  Op1.Rate := 1;

  Op1 := AddCommand (AN, 2);
  Op1.Rate := 10;
  Result := AN;
  Task.Operations.Renumerate;
end;

procedure TTestProtokol.Test_Alt_Any_1;
begin
  AddAltNode (aoAny);

  CheckProtokol ([1, 2], [N, N], 11, 11);
  CheckProtokol ([2, 1], [E, N], 11, 11);
  CheckProtokol ([1], [N], 11, 1);
  CheckProtokol ([2], [N], 11, 10);
end;

procedure TTestProtokol.Test_Alt_All_1;
begin
  AddAltNode (aoAll);

  CheckProtokol ([1, 2], [N, N], 11, 11);
  CheckProtokol ([2, 1], [E, N], 11, 11);
  CheckProtokol ([1], [N], 11, 0);
  CheckProtokol ([2], [N], 11, 0);
end;

procedure TTestProtokol.Test_Alt_Strict_1;
begin
  AddAltNode (aoStrict);

  CheckProtokol ([1, 2], [N, N], 11, 11);
  CheckProtokol ([2, 1], [E, N], 11, 0);
  CheckProtokol ([1], [N], 11, 0);
  CheckProtokol ([2], [N], 11, 0);
end;

procedure TTestProtokol.Test_Alt_Order_1;
begin
  AddAltNode (aoOrder_);
  CheckProtokol ([1, 2], [N, N], 11, 11);
  CheckProtokol ([2, 1], [E, N], 11, 1); //??? или не засчитывать ничего ?
  CheckProtokol ([1], [N], 11, 1);
  CheckProtokol ([2], [N], 11, 10);
end;

procedure TTestProtokol.Test_Alt_Alternate_1;
begin
  AddAltNode (aoAlternate);

  CheckProtokol ([1, 2], [N, N], 10, 10);
  CheckProtokol ([2, 1], [E, N], 10, 10); //??? [N, N] ?
  CheckProtokol ([1], [N], 10, 1);
  CheckProtokol ([2], [N], 10, 10);
end;

procedure TTestProtokol.Test_Alt_Alternate_2;
var
  AN: TAltTaskNode;
  Op1, Op2: TSDEOperation3;
begin
(*
  AddAltNode (aoAlternate);
  Op1 := AddCommand (Task.Operations, 3);
  Op1.Rate := 100;
  Task.Operations.Renumerate;

  CheckProtokol ([1, 2], [N, N], 10, 10);
  CheckProtokol ([2, 1], [E, N], 10, 10); //??? [N, N] ?
  CheckProtokol ([1], [N], 10, 1);
  CheckProtokol ([2], [N], 10, 10);


  AN := Task.Operations.AddNodeN ('AltNode', TAltTaskNode) as TAltTaskNode;
  AN.AlterOrder := AlterOrder;
  Op1 := AddCommand (AN, 1);
  Op1.Rate := 1;

  Op1 := AddCommand (AN, 2);
  Op1.Rate := 10;
  Result := AN;
  Task.Operations.Renumerate;
*)
end;

procedure TTestProtokol.Setup10;
var
  i: Integer;
  sdef: ISDEF;
  V: TVectorView;
  B: TViewsBuilder;
  P: TPageList;
begin
  sdef := App.SDEF(App.MainDoc);
  sdef.Clear;
  P := sdef.GetSchemeSet.ListWN[0];
  sdef.GetSchemeBox.Data := P;
  B := TViewsBuilder.Create(P, sdef.GetSchemeBox);
  for i := 0 to 10 do
  begin
    V := B.AddView(tcWikl, FloatPoint(i * 5 + 10, 10), 0);
    with V.CreateSubscript do
    begin
      SubscriptName := IntToStr(V.Tag);
      SubscriptPosition := pBottom;
    end;
    //SubscriptColor.RGBColor := VViolet;
  end;
  B.Free;
end;

function TTestProtokol.AddCommand (ATaskNode: TTaskNode; Act: integer): TSDEOperation3;
var
  i: integer;
  V: TVectorView;
  sdef: ISdef;
  P: TPageList;
  Op: TSDEOperation3;
begin
  sdef := App.SDEF (App.MainDoc);
  P := sdef.GetSchemeSet.ListWN [0];
  V := P.FindView (tcWikl, Act) as TVectorView;
  Result := ATaskNode.AddOperationN ('Действие ' + IntToStr(Act), V.TechMain, 'положение', 'отключен');
  RenderTask (ATaskNode.Task);
end;

procedure TTestProtokol.RenderTask (ATask: TSDETask);
begin
  ATask.Render;
  {if ATask = Task then
    frmBlanksForm.frmBlankEditor.RenderBlank (ATask)
  else if (ATask = Protokol) then
    frmBlanksForm.frmProtokol.RenderBlank (ATask);}
end;

procedure TTestProtokol.AddCommand(ATask: TSDETask; Acts: array of integer);
var
  i: integer;
  V: TVectorView;
  sdef: ISdef;
  P: TPageList;
  Op: TSDEOperation3;
begin
  sdef := App.SDEF (App.MainDoc);
  P := sdef.GetSchemeSet.ListWN [0];
  ATask.Clear;
  for i := low (Acts) to high (Acts) do begin
    V := P.FindView (tcWikl, Acts[i]) as TVectorView;
    Op := ATask.Operations.AddOperationN
      ('Действие ' + IntToStr(Acts[i]), V.TechMain, 'положение', 'отключен');
    if ATask = Task then
      Op.Rate := round(IntPower(10, Acts[i]-1));
  end;
  ATask.Operations.Renumerate;
  RenderTask (ATask);
end;

procedure TTestProtokol.CheckCommand (ATask: TSDETask; Acts: array of integer);
var
  i: integer;
  V: TVectorView;
  sdef: ISdef;
  P: TPageList;
  S: string;
begin
  sdef := App.SDEF (App.MainDoc);
  P := sdef.GetSchemeSet.ListWN [0];
  S := PrintTask (ATask) + PRet + PrintAсts (Acts);
  for i := 0 to ATask.Operations.Count-1 do begin
    V := (ATask.Operations.Nodes [i] as TSDEOperation3).Element;
    CheckEquals (V.Tag, Acts [i], S);
  end;
end;

procedure TTestProtokol.CheckMaxRate (Rate: integer);
begin
  CheckEquals (Task.CalcMaxRate, Rate);
end;

procedure TTestProtokol.CheckRate (Rate: integer);
begin
  CheckEquals (Task.CalcRate, Rate);
end;

procedure TTestProtokol.CheckProtokol (Acts: array of integer; Schedule: array of TScheduleStatus; MaxRate, Rate: integer);
begin
  Protokol.Clear;
  AddCommand(Protokol, Acts);
  Task.LinkProtokol;
  Task.CalcSchedule;
  CheckSchedule (Protokol, Schedule);
  Protokol.Render;
  //frmBlanksForm.frmProtokol.RenderBlank(Protokol);
  CheckMaxRate (MaxRate);
  CheckRate (Rate);
end;

function TTestProtokol.PrintAStatus (const A: array of TScheduleStatus): string;
var
  i: integer;
begin
  Result := '';
  for i := 0 to High (A) do
    Result := Result + SScheduleStatus [A[i]] + ' ';
end;

function TTestProtokol.PrintAсts (const A: array of integer): string;
var
  i: integer;
begin
  Result := '';
  for i := 0 to High (A) do
    Result := Result + IntToStr (A[i]) + ' ';
end;

function TTestProtokol.PrintTask (ATask: TSDETask): string;
var
  i: integer;
  Op: TSDEOperation3;
begin
  Result := '';
  for i := 0 to ATask.Operations.Count-1 do begin
    Op := ATask.Operations.Nodes [i] as TSDEOperation3;
    Result := Result + Op.IIDS + ' ';
  end;
end;

procedure TTestProtokol.CheckSchedule (ATask: TSDETask; Acts: array of TScheduleStatus);
var
  i: integer;
  Op: TSDEOperation3;
  OpActs: array of TScheduleStatus;
begin
  SetLength (OpActs, ATask.Operations.Count);
  for i := 0 to ATask.Operations.Count-1 do begin
    Op := ATask.Operations.Nodes [i] as TSDEOperation3;
    OpActs [i] := Op.Schedule;
  end;

  for i := 0 to ATask.Operations.Count-1 do begin
    Op := ATask.Operations.Nodes [i] as TSDEOperation3;
    Check (Op.Schedule = Acts [i],
      PrintTask (ATask) + PRet +
      PrintAStatus (Acts) + PRet +
      PrintAStatus (OpActs));
  end;
end;

procedure TTestProtokol.CheckInvertCount (ATask: TSDETask; N: integer; Up: boolean; Cnt: integer);
var
  Op: TSDEOperation3;
  С: integer;
  S: string;
begin
  S := PrintTask (ATask);
  Op := ATask.Operations.Nodes [N] as TSDEOperation3;
  if Up then
    С := Task.CalcInversionsUp (Op)
  else
    С := Task.CalcInversionsDown (Op);
  CheckEquals (С, Cnt);
end;

initialization
  TestFramework.RegisterTest('TestProtokol Suite', TTestProtokol.Suite);
end.


Кстати, вот еще минус вашего подхода.
Если заворачивать тестовые случаи в обычные методы с параметрами, то при изменении состава параметров передаваемых в метод, о необходимости изменения параметров вызовов скажет компилятор и приложение не соберется.
А в вашем случае если забыли поменять параметры, то все соберется, но начнут падать тесты и по каждому придется разбираться в изменениях.
Это если я правильно понял, что у вас параметры передаются как массив вариантов.
Отредактировано 17.02.2019 10:36 swame . Предыдущая версия . Еще …
Отредактировано 17.02.2019 9:34 swame . Предыдущая версия .
Отредактировано 17.02.2019 9:10 swame . Предыдущая версия .
Отредактировано 17.02.2019 9:07 swame . Предыдущая версия .
Re[7]: Порка: TestMeCode.com
От: Unhandled_Exception Россия  
Дата: 17.02.19 09:23
Оценка:
Здравствуйте, swame, Вы писали:

S>Тесты для DUnit САМ делал


Любопытно, а чем сейчас покрытие считают для юнит тестов на дельфи?
Re[8]: Порка: TestMeCode.com
От: swame  
Дата: 17.02.19 09:37
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Здравствуйте, swame, Вы писали:


S>>Тесты для DUnit САМ делал


U_E>Любопытно, а чем сейчас покрытие считают для юнит тестов на дельфи?


Не сталкивался, у меня покрытие тестами небольшое, пишу тесты только на хрупкие к изменению алгоритмов куски кода,
все покрыть тестами слишком дорого.
Re[9]: Порка: TestMeCode.com
От: Unhandled_Exception Россия  
Дата: 17.02.19 10:59
Оценка:
Здравствуйте, rudzuk, Вы писали:

R>https://sourceforge.net/projects/delphicodecoverage/


Спасибо!

Там на форуме один пост. Просто тема юнит тестирования не очень актуальна для дельфи?..
Re[10]: Порка: TestMeCode.com
От: rudzuk  
Дата: 17.02.19 11:06
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

UE> Там на форуме один пост. Просто тема юнит тестирования не очень актуальна для дельфи?..


Да кто его знает. Проект раньше жил на почившем гуглокоде, там, вроде, активность какая-то была.
avalon/2.0.6
Re[9]: Порка: TestMeCode.com
От: Garamzin  
Дата: 17.02.19 13:11
Оценка:
Здравствуйте, swame, Вы писали:

S>Вот пример типичного рутинного теста из моего кода сложнее калькулятора.

S>Как бы он выглядел в вашей системе?

Брось компилируемый проект на почту с одной функцией и с тестами на адрес: garamzin.vladimir(at)майл.ру
Re[10]: Порка: TestMeCode.com
От: swame  
Дата: 17.02.19 17:29
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Здравствуйте, swame, Вы писали:


S>>Вот пример типичного рутинного теста из моего кода сложнее калькулятора.

S>>Как бы он выглядел в вашей системе?

G>Брось компилируемый проект на почту с одной функцией и с тестами на адрес: garamzin.vladimir(at)майл.ру


Не так просто. Там примерно 2000 модулей 1KK строк кода и 15 сторонних пакетов компонентов.
Я хотел получить просто набросок-идею. Компилить для этого не обязательно.
Если очень хочется могу дать доступ к машине где настроена сборка.
Re[2]: Порка: TestMeCode.com
От: licedey  
Дата: 17.02.19 19:13
Оценка:
Здравствуйте, falcoware, Вы писали:



F>ИМХО, тулсы для разработчиков не взлетают. Кто тут ОКСЕТТУ делал и пролетел?


А почему не взлетают? Интересно ваше мнение.

Я конечно понимаю, что проще продать 1000 генераторов инвойсов, чем 1000 отладчиков, но все же. JetBrains тоже начинали со скромной IDE для Java. Потом чуваки которые сделали PVS-Studio, тоже вроде не бедствуют.
Уж молчу про забугорных коллег. Вы только посмотрите кого купила Microsoft. 80% — это компании разработчики тулсов для нас.
Re[11]: Порка: TestMeCode.com
От: Garamzin  
Дата: 17.02.19 20:57
Оценка:
Здравствуйте, swame, Вы писали:

S>Я хотел получить просто набросок-идею. Компилить для этого не обязательно.


Вот смотри. Давай попробуем разобрать 1 твой тест метод TTestBlocking.Test_Imer_CreateBlockingsWikat;
  Код 1

// ***  ОТКРЫТИЕ ФАЙЛА БЕЗ ПРОВЕРКИ 
 OpenFile (1);


// *** 1-Й БЛОК ТЕСТА
  {выкатной выключатель}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206',
                      'Test_CreateBlockings 2.1');
  TestBlocked (LB, 'Test_CreateBlockings 2.1.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.1.12');

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.1.13', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
  end;
  {}

// *** 2-Й БЛОК ТЕСТА

  LB := FindBlocking ('ПС_Имелетинская_ЗН_СВ-43_10_кВ', 'ПС_Имелетинская_СВ_43_10_кВ',
                      'Test_CreateBlockings 2.2');
  TestBlocked (LB, 'Test_CreateBlockings 2.2.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.2.12');
  VC[0] := (Scheme.FindLUni ('#1142\\\Схема\СП 3 С СВ 43 10 кВ') as TnamedBlock).VrepFirst as TVectorView;

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  (VC[0] as TShassi).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.2.13.1', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
    (VC[0] as TShassi).TrolleyState := tsWork;
  end;


// *** ДАЛЕЕ ТО, ЧТО ДОЛЖНО ТЕСТИРОВАТЬСЯ, НО НИЖЕ НЕТ КОДА ТЕСТИРОВАНИЯ, ПРОСТО ПЕРЕЧЕНЬ ДАННЫХ.

  {На секции 6-10 кВ если для ячеек потребителей не создавать блок с ЗН на секции}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_1_С_Т-1',
                      'Test_CreateBlockings 2.3.1', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', '#1143\\\Схема\полушасси[1]',
                      'Test_CreateBlockings 2.3.2', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', '#1141\\\Схема\СП 1 С СВ 21 10 кВ',
                      'Test_CreateBlockings 2.3.3', true);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_ТСН-1',
                      'Test_CreateBlockings 2.3.4', true);

  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им101',
                      'Test_CreateBlockings 2.3.5', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им103',
                      'Test_CreateBlockings 2.3.6', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им105',
                      'Test_CreateBlockings 2.3.7', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им107',
                      'Test_CreateBlockings 2.3.8', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им109',
                      'Test_CreateBlockings 2.3.9', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им111',
                      'Test_CreateBlockings 2.3.10', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им113',
                      'Test_CreateBlockings 2.3.11', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_Им115',
                      'Test_CreateBlockings 2.3.12', false);
  LB := FindBlocking ('ПС_Имелетинская_ЗН_1_С_10_кВ', 'ПС_Имелетинская_В_10_кВ_ДГР-1',
                      'Test_CreateBlockings 2.3.13', false);

  {блокировка с тележкой автомата}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ_ТСН-2', 'ПС_Имелетинская_АВ_0,4_кВ_ТСН-2',
                      'Test_CreateBlockings 2.4.1', true);

  {блокировк c  ВКЛ только рядом расположенного }
  LB := FindBlocking ('ПС_Имелетинская_ЗН_БСК-1', 'ПС_Имелетинская_В_10_кВ_БСК-1',
                      'Test_CreateBlockings 2.4.1', false);

end;


Тестируемый код:
// *** 1-Й БЛОК ТЕСТА
  {выкатной выключатель}
  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206',
                      'Test_CreateBlockings 2.1');
  TestBlocked (LB, 'Test_CreateBlockings 2.1.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.1.12');

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.1.13', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
  end;


Опустим необходимость подготовки тестовых данных, проверки открытия файла и тд, состредоточимся только на этом участке кода.
Как это все будет выглядеть в TestCode.
Открой страницу теста для калькулятора.
Я тут буду приводить номера пунктов, что бы понять о чем я говорю. Конечно в живом диалоге и с рабочим примером лучше объясняться, но я постараюсь.
1.Сделать в модуле и рабочем классе как описано в пунктах: 2.1, 2.2, 2.3.
2. Пункт 2.4.2 Создать тип метода, что мы будем тестировать
Тут важно знать, какой объект мы будем тестировать, который уже создан или который нужно создавать для теста
Если нужно создать то прописываем например создание и удаление объекта и инициализацию в случае креша какого то теста и других непредвиденных обстоятельств
 type
 // имя тут может быть любое
   TTestMethod = ( 
            ,tmInit
            ,tmCreateObject
            ,tmTestBlocked // тестируем 1. метод
            ,tmFreeObject 
         );


Мы же предположим, что объект на момент теста будет уже создан, поэтому тестируем только 1 метод.
 type
   TTestMethod = ( // имя может быть любым
            tmTestBlocked // тестируем 1. метод
         );


3. Регистрация метода который будем тестировать п. 2.4.4.
  IRegisterMethod(tmTestBlocked  ,'Test Blocked'  ,'Проверка поиска текста и дополнительной информации ');// Test methods


4. Добавляем наши параметры для теста
//Тест на Истину (объяснения ниже)
 IRegisterMethodParams(['ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206'] // 1-й массив что мы тестируем
                         ,['Test_CreateBlockings 2.1','Test_CreateBlockings 2.1.11','Test_CreateBlockings 2.1.13']// 2-й массив, с чем мы сравниваем
                         ,'Тут описание, я пишу тут параметры и какой д/б результат'); // True result
//Тест на ЛОЖЬ (объяснения ниже)
 IRegisterMethodParams(['ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206'] // 1-й массив что мы тестируем
                         ,['Test_CreateBlockings =ТУТ ПИШЕМ ЧЕГО НЕ ДОЛЖНО БЫТЬ!!!','ошибка','ошибка'] // 2-й массив,специально создаем ошибку, но кол-во строк д/б равно первой регистрации параметров иначе будет ошибка регистрации. Смотри параметр TParamCheckOptions
                         ,'Тут описание метода, например ТУТ ОШИБКА'
                         ,trError // НОВЫЙ ПАРАМЕТР ПРОВЕРКИ НА ОШИБКУ
); // True result

Объяснения: "Тест на Истину" и "Тест на ЛОЖЬ"
Проверка д/б не только на ИСТИНУ но и на ЛОЖЬ, при этом итоговый результат д/б положительный "Тест пройден"
Пример калькулятора:
1) "Тест на Истину"
IRegisterMethodParams([2,2],[1],'2 div 2=1'); // True result
То есть 2 div 2 = 1. Если результат не равен 1, то будет ошибка.
2) "Тест на ЛОЖЬ"
IRegisterMethodParams([4,4],[4],'4 div 4=4 trError it''s Ok',trError); // Error = Ok
4 div 4 =4 — Это заведомо явный ввод ошибки, тест ОБЯЗАН вернуть ошибку. НО после всех тестов д/б результат Ok, а не ERROR, поэтому мы пишем, что с этими данными должна быть сгенерирована ошибка, и если ее не будет, то ЭТО будет считаться ошибкой. Поэтому мы прописываем доп. параметр trError, уведомляя систему тестирования, что возврат кода ошибки, означает, что тест ПРОЙДЕН!
Очень ВАЖНО писать тесты как на Истину, так и на Ложь и с TestCode делать это очень просто.

Может быть я банальные вещи пишу, но я стараюсь объяснить, как лучше тестировать код, тем кто это не делает.


5. Пункт 2.4.5. Реализация самого теста. Допустим есть объект который мы тестируем MyObj

case TTestMethod(IMethod.IGetNumParamUser)  of
    tmTestBlocked:
      begin
//  LB := FindBlocking ('ПС_Имелетинская_ЗН_КЛ_10_кВ__Им206', 'ПС_Имелетинская_В_10_кВ_Им206',
//                      'Test_CreateBlockings 2.1');

    LB := MyObj.FindBlocking (IMethod_AsAnsiString(IMethod.IGetArrParam(0)), IMethod_AsAnsiString(IMethod.IGetArrParam(1))
     // я не понял назначение этой строки если это результат который д/б то прописать так:
                        ,IMethod_AsAnsiString(IMethod.IGetArrResultForTestMethod(0)));

  // Далее, как я понял проверяются элементы TBlockingInfo   
  {  TestBlocked (LB, 'Test_CreateBlockings 2.1.11', true, false);
  CheckIs(LB.ControlItemT.View, TWiklWid, 'Test_CreateBlockings 2.1.12');

  (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
  try
    TestBlocked (LB, 'Test_CreateBlockings 2.1.13', false, false);
  finally
    (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
  end;
}
    // их можно проверять по правилу "Все или Ничего", 
    // т.е. только в конце ставим результат trOk, а сейчас выставим ошибку, что бы менише писать if begin .. end
     result:=trError;
           (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
         if not MyObj.TestBlocked (LB, IMethod.IGetArrResultForTestMethod(1)), true, false) then exit;
           (LB.ControlItemT.View as TWiklWid).TrolleyState := tsService;
         if not MyObj.TestBlocked (LB, IMethod.IGetArrResultForTestMethod(2)), true, false) then exit;
        result:=trOk; // если дошли до конца, значит тест пройдет
      end;
  end; // case

Я бы не использовал при тестировании в тестах код try..finally, как и try..except
Вместо try..finally проинициализовал бы в начале: (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
А try..except не надо использовать, тк исключения ловятся выше уровнем.


Мне сложно писать абстрактный пример, если бы был рабочий тест на DUnit, мне было бы намного проще показать преимущества.
Но ты наверно заметил, что в TestCode жестко разделаются параметры и сам тестовый код. Это одно из принципиальных отличий.
И отличий очень много.

S>Если заворачивать тестовые случаи в обычные методы с параметрами, то при изменении состава параметров передаваемых в метод, о необходимости изменения параметров вызовов скажет компилятор и приложение не соберется.

S>А в вашем случае если забыли поменять параметры, то все соберется, но начнут падать тесты и по каждому придется разбираться в изменениях.
Нет, не соберется, если будет вызов тестируемого метода, если конечно не будет Default параметров, но это точно так же будет и при любом другом использовании измененного кода.

S>Движок тестирования вынесен в отдельное приложение — но это только недостаток

На мой взгляд это огромный плюс, так как позволяет тестировать несколько приложений и DLL одновременно.

S>Про отладочные сообщения ничего не говорю — это вообще отдельный продукт, непонятно зачем он объединен c юнит тестированием.

То что сейчас есть в продукте TestCode & TestSend, это лишь наверно 1/10 из того, что запланировано.
И почему я объеденил?
Потому что мне так удобнее, мне не надо что то еще запускать и все, чем я пользуюсь, но находится в отдельных модулях, я хочу интегрировать в одно приложение.
Re[12]: Порка: TestMeCode.com
От: swame  
Дата: 18.02.19 10:26
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Здравствуйте, swame, Вы писали:


S>>Я хотел получить просто набросок-идею. Компилить для этого не обязательно.


G>Может быть я банальные вещи пишу, но я стараюсь объяснить, как лучше тестировать код, тем кто это не делает.


Я понимаю принципы тестирования и понимаю как писать тесты в твоей системе, просил описать преимущества, пока вижу только усложнение.
А ты рекламируешь ее как дающую самое дешевое написание тестов.

G>5. Пункт 2.4.5. Реализация самого теста. Допустим есть объект который мы тестируем MyObj



G>[/pascal]

G>

G> Я бы не использовал при тестировании в тестах код try..finally, как и try..except
G> Вместо try..finally проинициализовал бы в начале: (LB.ControlItemT.View as TWiklWid).TrolleyState := tsWork;
G> А try..except не надо использовать, тк исключения ловятся выше уровнем.


Я и не использую try..except
try..finally используется для возврата старого значения.
Понимаю, что где-то делаю не по канонам, но в данном случае так кажется проще.

G>Но ты наверно заметил, что в TestCode жестко разделаются параметры и сам тестовый код. Это одно из принципиальных отличий.


Понимаю это отличие , что оно дает? Пока вижу только ненужное усложнение.

S>>Если заворачивать тестовые случаи в обычные методы с параметрами, то при изменении состава параметров передаваемых в метод, о необходимости изменения параметров вызовов скажет компилятор и приложение не соберется.

S>>А в вашем случае если забыли поменять параметры, то все соберется, но начнут падать тесты и по каждому придется разбираться в изменениях.
G>Нет, не соберется, если будет вызов тестируемого метода, если конечно не будет Default параметров, но это точно так же будет и при любом другом использовании измененного кода.

ТО ты хочешь сказать что если мы вместо
IRegisterMethodParams([4,4],[4],'4 div 4=4 trError it''s Ok',trError);


напишем

IRegisterMethodParams([4,4,4],[4],'4 div 4=4 trError it''s Ok',trError);


то код не соберется ? (нужно именно чтобы не собрался).

S>>Движок тестирования вынесен в отдельное приложение — но это только недостаток

G>На мой взгляд это огромный плюс, так как позволяет тестировать несколько приложений и DLL одновременно.

О чем это и зачем?

S>>Про отладочные сообщения ничего не говорю — это вообще отдельный продукт, непонятно зачем он объединен c юнит тестированием.

G>То что сейчас есть в продукте TestCode & TestSend, это лишь наверно 1/10 из того, что запланировано.
G>И почему я объеденил?
G>Потому что мне так удобнее, мне не надо что то еще запускать и все, чем я пользуюсь, но находится в отдельных модулях, я хочу интегрировать в одно приложение.

Так не стоит делать хотя бы потому что код со скомпилированными тестами не должен уходить от разработчика, а логирование можно поставить и в релиз.
И логирование и тесты никак не связаны.
Re[13]: Порка: TestMeCode.com
От: Garamzin  
Дата: 18.02.19 14:01
Оценка:
Здравствуйте, swame, Вы писали:


S>ТО ты хочешь сказать что если мы вместо

S>
S>IRegisterMethodParams([4,4],[4],'4 div 4=4 trError it''s Ok',trError);
S>


S>напишем


S>
S>IRegisterMethodParams([4,4,4],[4],'4 div 4=4 trError it''s Ok',trError); 
S>



S>то код не соберется ? (нужно именно чтобы не собрался).


Если про эти параметры, то нет, не нужно, что бы не собирался проект, т.к. есть методы с плавающим количеством параметров к примеру тот же Write.
Есть методы с дефаулт параметрами, которые то же необходимо тестировать .




S>>>Движок тестирования вынесен в отдельное приложение — но это только недостаток

G>>На мой взгляд это огромный плюс, так как позволяет тестировать несколько приложений и DLL одновременно.

S>О чем это и зачем?

тестировать несколько приложений и DLL одновременно

Если одно приложение, то наверно этот функционал излишен, но если несколько приложений работают в связке, то он востребован.

S>Так не стоит делать хотя бы потому что код со скомпилированными тестами не должен уходить от разработчика, а логирование можно поставить и в релиз.

S>И логирование и тесты никак не связаны.
Была мысль сделать пароль на тесты, в принципе можно и прикрутить.
Отредактировано 18.02.2019 14:04 Garamzin . Предыдущая версия .
Re[14]: Порка: TestMeCode.com
От: rudzuk  
Дата: 18.02.19 15:34
Оценка:
Здравствуйте, Garamzin, Вы писали:

G> S>
G> S>IRegisterMethodParams([4,4,4],[4],'4 div 4=4 trError it''s Ok',trError);
G> S>


Как такой подход уживается с var и out параметрами?
avalon/2.0.6
Re: Порка: TestMeCode.com
От: ArcticLine2 http://www.IconDesignLAB.com
Дата: 19.02.19 15:34
Оценка:
Здравствуйте, Garamzin, Вы писали:

G>Хочу посоветоваться:

G> 1. Что в первую очередь "причесать" для старта продаж?


Мы все еще пишем на Делфи. И, потенциально, я ваш клиент. Сделать разработку проще, а тестирование более дешевым интересно. Но, зайдя на сайт, я вообще не понял, что вы продаете и как это мне может помочь. Технари, конечно, поняли, но я не технарь.
Вывод: тексты надо переписывать в первую очередь.


--
С уважением, Роман.
дизайн иконок и Клуб по интересам для шароварщиков
Re: Порка: TestMeCode.com
От: VladFein США  
Дата: 19.02.19 22:54
Оценка:
Здравствуйте, Garamzin, Вы писали:


G>- Перенес сайт с домена TestMe-On.com на TestMeCode.com


TestMyCode.com ? Пока свободен...
Re: Порка: TestMeCode.com
От: rean  
Дата: 20.02.19 07:27
Оценка:
deleted
Отредактировано 22.04.2019 8:51 deleted2 . Предыдущая версия . Еще …
Отредактировано 22.04.2019 8:09 deleted2 . Предыдущая версия .
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 20.02.19 07:30
Оценка:
Здравствуйте, ArcticLine2, Вы писали:

AL>Но, зайдя на сайт, я вообще не понял, что вы продаете и как это мне может помочь.

AL>Вывод: тексты надо переписывать в первую очередь.

Как оказалось сделать продажные тексты очень трудно.
Получается нужна продажная страница и для программистов и руководителей.
Заказал текст, не знаю что получится.
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 20.02.19 07:46
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, Garamzin, Вы писали:



G>>- Перенес сайт с домена TestMe-On.com на TestMeCode.com


VF>TestMyCode.com ? Пока свободен...


Registered On: 2010-06-16

Единственно короткий домен без дефиса, который нашли свободным это был TestMeCode.com.
От дефиса отказался, так как при анализе результатов с поисковика, была неприглядная ситуация.
Не помню уже подробности, но показали и рассказали в картинках, что лучше иметь домен onetwothreefourfive.com чем a-b.com с точки зрения поисковиков.
В общем убедили.
И на сколько я знаю английский TestMeCode не должен вызывать диссонанса в английской аудитории.
Me — Мне
My — Мой
Re[2]: Порка: TestMeCode.com
От: Garamzin  
Дата: 20.02.19 08:44
Оценка:
Здравствуйте, rean, Вы писали:

R>Слишком сложно сделано, типичный программистский проект для того чтобы можно было усложнить написание программ, а не облегчить.


Найдите и покажите продукт который бы решал эту проблему проще и быстрее, чем TestCode.

Если мы хотим тестировать код, то тесты все равно лучше писать, чем не писать.
Но с помощью TestCode, это можно сделать с самыми минимальными усилиями и с максимальной скоростью покрытия тестами функционала.
Плюс переработал код, с пожеланиями которые озвучивались в прошлом году.
Появилось выборочное тестирование по группам юнитов, тайминг и еще много чего.
И выполняя пожелания коллег по улучшению продукта, сам стал пользоваться этими возможностями.
Планов очень много по развитию, очень сильно хочу что бы все получилось и довел продукт до той точки, которую я вижу.

R>Переусложнение сквозит во всем, начиная с количества юнитов

Это реальная проблема для программиста с дефайном подключить юниты?
Четыре действия это долго?
1.Выделить на сайте код
2.Скопировать в буфер
3.Щелкнуть мышкой куда вставить юниты
4.Вставить из буфера код.
Это долго?
При разработке у меня открыта страница в браузере постоянно и я этим пользуюсь ежедневно. Я Вас очень прошу не надо мне рассказывать про переусложнение, я каждый день этим пользуюсь.

R>Для начала нужно осознать, почему программисты не хотят писать тесты.

1. Не знают как.
2. Существующие методы тестирования не помогают, а усложняют разработку.
Когда в приказном порядке наша группа стала делать тесты (WhileBox,BlackBox), что как минимум на 40% увеличило время разработки, а реальное время стало в 2 раза больше. То есть с тестами, которые должны помогать, мы стали срывать сроки. На уши встали все.
Оставили тогда только нагрузочное тестирование.
Ведь этот продукт родился далеко не от хорошей жизни.
Все понимают, что тестировать надо, но нужно что бы это было удобным, с равномерным покрытием и что самое важное это должно делаться очень быстро.
Но с тестами был сделан шаг дальше.Теперь тесты, это штатный инструмент отладки.
Сейчас при разработке TestCode:
Первый пункт — это инструмент отладки
Второй пункт — проверка функционала при изменениях проекта.

После этого появились много плюсов, один из которых, при групповой разработке, разбираться в ошибках приходится тому, кто их создал, а не автор модуля.
Если автор модуля не прав, добавляются тестовые данные, создающие ошибку и все, человек исправляет свои косяки, но часто бывает, что ошибки бывают косвенные, ошибка в модуле А, но причина не в модуле А, а в модуле С.
Такие тесты очень экономят время, лично я прям в восторге от этого.

Другой плюс, про который совсем не думали, это время обучения персонала. В несколько раз специалист "входит в проект" быстрее, если код с тестами.
Вот как то так.
Re[3]: Порка: TestMeCode.com
От: rean  
Дата: 20.02.19 09:50
Оценка:
deleted
Отредактировано 22.04.2019 8:51 deleted2 . Предыдущая версия . Еще …
Отредактировано 22.04.2019 8:08 deleted2 . Предыдущая версия .
Re[4]: Порка: TestMeCode.com
От: Garamzin  
Дата: 20.02.19 11:17
Оценка:
Здравствуйте, rean, Вы писали:

> да и еще такой сложный

Сложный?
На мой взгляд, система контроля версии (trunk,branches,tags,hotfix) на много сложнее.
Можно узнать в чем сложность?
Все что надо это:
1. Зарегистрировать класс
2. Зарегистрировать метод
3. Зарегистрировать входные данные и результат
4. Вызвать тестируемый метод
— это минимальный набор


R>Решает все задачи, какие мне нужны. И это благодаря препроцессору C++. А на Delphi, когда я на нем еще писал,

R>использовался элементарный if.
Препроцессор действительно хорошая штука, но "элементарный if" для тестов?
М-м-м-м, если программист один, то может писать как он хочет, если в группе, то ата-та по попе ему обеспечено.
Как минимум нужно Define использовать.


R>Без надобности платить неизвезтно за что неизвестно кому.

Можно и бесплатно, я писал что 100 параметров это на средний проект хватит.


G>>Но с помощью TestCode, это можно сделать с самыми минимальными усилиями и с максимальной скоростью покрытия тестами функционала.

R>Рекламное бла-бла-бла ни о чем. Пытаетесь потенциального покупателя заболтать? Нет доказательств. Это выглядит как рекламное вранье.
R>Все, что вы пишите пользователям, должно быть не просто правдой, но и иметь доказательства, а это факты, примеры, истории из жизни,

Возьмите класс на 5-10 методов, сделайте тест, что бы компилировался, дайте ссылку или пошлите по почте, давайте сравним.

R>Потому что смотрите замыленными глазами, а нужно смотреть глазами тех, кто никогда не видел ваш продукт и не связан с вами обязательствами


Возможно, и тут очень важна обратная связь.


G>>4.Вставить из буфера код.

G>>Это долго?
R>Врете. Эти действия не приведут к работающему тесту.
Разговор ведь про "количества юнитов" был.

R>Переусложнение сквозит во всем, начиная с количества юнитов


R>Напишите полностью все шаги и увидите, что у вас лишних шагов настолько много, что пропадает желение даже близко начинать писать тесты.


Сейчас полноценное написание теста это
1. copy-paste 3-х кусков (unit, methods, initialization)
2. Создать методы с помощью горяч.клавиши
3. в блоке initialization поменять название класса на свой
4. Описать методы которые будем тестировать с регистрацией
5. введем параметры
6. напишем вызов тестируемых методов.
Это сейчас!

При написании эксперта 1..5 пункт будут делаться автоматом, в 6-й пункт нужно будет ввести корректировку.
ВСЕ!!! Куда быстрее?
Сейчас 6 шагов, потом вообще 1 и то, что бы просмотреть правильность сгенерированного кода.

Эксперт сейчас не запускается так как нужен фидбек и возможно, еще что то поменяется.

R>1. Копирую в проект один хидер.

R>2. Подключаю его запуск в main(), дописывая одну строчку вызова прогонов тестов.
R>3. В любом новом cpp файле я вписываю:
R>#include "test.hpp"
R>TEST() {

На счет С ничего не могу сказать, очень-очень давно не писал на нем.
Но если Вы на делфи, как я выше писал, сделаете проект с тестами, я сделаю свой тест.
Мне это очень интересно.

R>Именно. А ваш чем помогает упростить разработку?

R>Тем, что надо купить ваш продукт, часами разбираться в портянках кода и кучей всего на вашем сайте,
В архиве есть примеры
R>потом проделывать десятки шагов, чтобы только начать.
Пока всего 6

R>какие ждут пользователю, когда код придется модифицировать и все тесты, какие он писал ранее,

Вообще то этом и заключается тестирование!
Что бы при изменении спецификации старые тесты или проходили или должны быть модифицированы. Как по другому проверить правильность кода? Верить разработчику "на слово" не видя тесты?

R>придется переделывать, мучаясь с проблемой железо-бетонной связностью с кодом тестирования, где придется

R>переделывать каждый из тестов. А потом, когда вдруг захочется писать версию 2 проекта,

В архиве примеры где лежат тесты, их 3 вида.
1. Внутри модуля (я фанат этой практики)
2. Внешний файл в виде Include файла
3. Внешний файл в виде отдельного модуля.
Показаны плюсы и минусы этих подходов.


R>А вы даже советуете жестко завязывать тесты с кодом бизнес-логики проекта, считая это плюсом.

R>На деле это такой гемор, в какой не захочет вляпаться опытный программист, какой уже ранее делал так.
Тесты делают на функционал, код должен работать так, как описано в спецификации.
Если меняется спецификация и логика, то должны быть изменены и тесты.
А как по другому полноценно проверить код без тестов?
Программист все равно подготавливает данные, с ними отлаживает функционал, а если пришел тикет об ошибке, то программист так же тестирует — отлаживает свой код, с тестовыми данными, только ручками в отладчике.
Я сейчас просто не представляю, как можно было по другому вести разработку.

R>Весь интернет завален подобным и бесплатно. Вы добавили еще один, да еще и платно.

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


R>Чтобы выделиться на рынке, вы должны выделиться. А у вас еще один из многих переусложненный фреймворк.

Я с этим категорически не согласен.
Покажите более простой инструмент тестирования.

R>Не доказали ценность вашего продукта.

Возможно, но я очень хочу это сделать.
Re[6]: Порка: TestMeCode.com
От: Garamzin  
Дата: 20.02.19 19:30
Оценка:
Здравствуйте, rean, Вы писали:

R>«Определите в опциях «Conditionals Define»

R>Я считаю, что это лишняя сложности, без которой можно обойтись.
Все зависит от специфики работы.
Define у нас применяются везде, определяя компиляцию сервисов, dll до использования типа процессора и платформы.
Это стандартный атрибут работы. Хотя принимаю, что это скорее всего зависит от специфики работы.

R>например, зачем-то еще какой-то калькулятор.

В этом тулбаре будут мелкие утилитки помогающие в разработки и отладке приложений.

R>Уже в самом описании непонятно, что имеете ввиду. Мне пришлось секунд 10 соображать, что это.

R>Можно же было написать проще понятней, например, «будем тестировать, например, функцию Divide(), вот ее код:».
Спасибо. Полностью страницу придется переписать.


R>procedure TestDiv()

R>begin
R> Test.Register('Деление');
R> if Divide(6,3) <> 2 then Test.Failed('Деление не прошло');
R> Test.Register('Умножение');
R> if Multiply(6,3) <> 18 then Test.Failed('Умножение не прошло');
R>end;

От этого ушли намеренно, так как есть код обработки больших данных, поэтому и было принято решение разделить код тестирования и данные для тестирования.

R>Предлагаю тогда поиграть в игру. Представьте что вы инопланетянин, впервые на планете земля.

R>И вы заходите к себе на сайт. И понеслось! Все что вам покажется странным и необычным с точки зрения инопланетянина — записывайте!
R>Такой прием поможет немного убрать замыленный взгляд на свое детище.

Спасибо огромное за ценные советы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.