AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.01.2020, 17:54   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ax2012: Как выполнить unitTest в CIL?
По следам замечания от Макса Белугина
mazzy: Опубликовал проект SysString

Предположим, у меня есть класс с unit-тестами.
Понятно как запустить этот класс на сервере - установить у класса свойство RunOn=Server

Понятно как в ax2012 сделать два unit-тестовых класса, один из которых выполняется на клиенте, а другой на сервере: Создать потомка и, не создавая ни одного метода, указать у потомка свойство RunOn=Server. (в предыдущих аксаптах сложнее - там надо править и свойство, и метод createSuite)

Но как в ax2012 выполнить юнит-тесты не просто на сервере, а именно в CIL?
__________________
полезное на axForum, github, vk, coub.
Старый 07.01.2020, 18:01   #2  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Расширю список вопросов по unit тестам.
Может кто привести пример unit теста, разноски заявки на отгрузку, самого простого?
Вижу только множество синтетических примеров с калькулятором.
__________________
Axapta book for developer
Старый 07.01.2020, 18:09   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MikeR Посмотреть сообщение
Может кто привести пример unit теста, разноски заявки на отгрузку, самого простого?
Вижу только множество синтетических примеров с калькулятором.
Любой пример с контейнером: в CIL он предстставлен дот-нетовским массивом
Любой пример с TextBuffer: в CIL он представлен StringBuilder'ом
Любой пример с XML

не говоря уже об обрезании строк с типом из EDT

все это может по разному вести себя в классическом X++ и в CIL.


В данном случае хочется проверить поведение TextBuffer
__________________
полезное на axForum, github, vk, coub.
Старый 07.01.2020, 18:30   #4  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от mazzy Посмотреть сообщение
Любой пример с контейнером: в CIL он предстставлен дот-нетовским массивом
Любой пример с TextBuffer: в CIL он представлен StringBuilder'ом
Любой пример с XML
......
Я правильно понимаю, что запустить тест типа Salesforce:
X++:
new SalesFormLetter(Parm1,parm2...).run()
не получится?
И соответственно увидеть процент отработанного кода тоже?
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 203
Размер:	297.1 Кб
ID:	12532  
__________________
Axapta book for developer
Старый 07.01.2020, 18:33   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от MikeR Посмотреть сообщение
Я правильно понимаю, что запустить тест типа Salesforce:
Вот пример для dyn365fo https://docs.microsoft.com/en-us/dyn...written-in-atl
За это сообщение автора поблагодарили: MikeR (2).
Старый 07.01.2020, 18:42   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MikeR Посмотреть сообщение
Я правильно понимаю, что запустить тест типа Salesforce:
X++:
new SalesFormLetter(Parm1,parm2...).run()
не получится?
И соответственно увидеть процент отработанного кода тоже?
Почему не получится?
С акс4 вполне получается. И процент покрытого тестами кода тоже.
И на клиенте, и на сервере. Я ж даже написал как.

Вопрос про CIL. Как unit-тест класс запустить на сервере, причем гарантировано в CIL?
__________________
полезное на axForum, github, vk, coub.
Старый 07.01.2020, 18:49   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение

Предположим, у меня есть класс с unit-тестами.
Понятно как запустить этот класс на сервере - установить у класса свойство RunOn=Server
Вынести тестовый код в статические методы и runclassmethodil из тестовых методов?
Старый 07.01.2020, 18:54   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Вынести тестовый код в статические методы
https://coub.com/view/12fmyh
оно, конечно, да... но можно как-то попроще?
__________________
полезное на axForum, github, vk, coub.
Старый 07.01.2020, 23:32   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
оно, конечно, да... но можно как-то попроще?
Поискал в наших тестах нашел runas и invokestatocmethodil - скорее всего, ничего более удобного нет
За это сообщение автора поблагодарили: mazzy (2).
Старый 08.01.2020, 00:14   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
Поискал в наших тестах нашел runas и invokestatocmethodil - скорее всего, ничего более удобного нет
жаль.
дело в том, что для runAs должен быть метод со специальной сигнатурой - параметром только контейнер. Кроме того, в контейнер далеко не все получится засунуть.

что тут же делает тестирование в CIL дико трудозатратным.

============
Если хочется попробовать, то можно взять проект https://github.com/mazzy-ax/SysString

задать свойство RunOn=Server для класса StringTest
и добавить два метода:

в класс String:
X++:
public server static container trimIdentIL(container pack)
{
    boolean isCLR = xSession::isCLRSession();

    str s = conPeek(pack, 1);
    SysText     text    = SysText::construct(s);
    str         ret     = SysText::trimIdent(text).getText();

    return [ret];
}
и в класс StringTest:
X++:
void testTrimIdent_IL()
{
    str s = @'
    ABC
        123
    456
    ';

    anytype dummy = new XppILExecutePermission().assert();
    container ret = runClassMethodIL(ClassStr(String), staticMethodStr(String, trimIdentIL), [s]);

    this.assertEquals('ABC\n    123\n456', conPeek(ret, 1));
}
но это как-то сильный перебор для обычных проектов, в которых нет специально подготовленных для CIL методов.
я надеялся, что как-нибудь допилили SysTest-классы
__________________
полезное на axForum, github, vk, coub.
Старый 08.01.2020, 08:54   #11  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Сообщение от belugin Посмотреть сообщение
Вот пример для dyn365fo https://docs.microsoft.com/en-us/dyn...written-in-atl
Аж прям прослезился это аналог убитого в Axapta 3.0 benchmark ?
__________________
Axapta book for developer
Старый 09.01.2020, 08:52   #12  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от MikeR Посмотреть сообщение
Аж прям прослезился это аналог убитого в Axapta 3.0 benchmark ?
Это для приемочного тестирования а не для performance. Возможно, кто-то его использует для perfromance - Иван Кашперук, скорее всего знает, об этом больше.

См также пример из его блога
Старый 09.01.2020, 09:36   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
А давайте про ATL в новую ветку?

возвращаясь к unitTest'ам.

Цитата:
Сообщение от MikeR Посмотреть сообщение
Может кто привести пример unit теста, разноски заявки на отгрузку, самого простого?
я кажется вопрос понял.

самый простой unit-test для любой, даже очень сложной функциональности, выглядит так:

запустить и убедится, что запущенный функционал не падает хотя бы с тривиальными "пустыми" параметрами.

в данной ветке, простейший unit test может еще и создавать environment для выполнения: на клиенте, на сервере без CIL, на сервере с CIL
__________________
полезное на axForum, github, vk, coub.
Старый 09.01.2020, 09:53   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от MikeR Посмотреть сообщение
Может кто привести пример unit теста, разноски заявки на отгрузку, самого простого?
и да, сразу отвечу на вопрос, который ты, скорее всего, хотел задать, но получилось у тебя только про "самый простой" unit-test.

вопрос, скорее всего, был как при помощи unit тестов убедиться, что такой сложный функционал как "разноска" работает корректно.

ответ должен быть ссылками на книги и статьи, где говорится что:
1. юнит-тестирование - не панацея и не серебряная пуля.
2. юнит-тестирование предполагает, что сложный функционал - это композиция используемых методов.
3. юнит тестирование предполагает, что если используемые методы протестированы, то в сложном функционале не обязательно тестировать весь функционал, достаточно протестировать только как работает композиция. (это очень спорный и неоднократно критиковался многими)

предполагается, что чем больше используемых методов покрыто тестами, тем больше уверенность, что разноска протестирована. (про возрастание уверенности тоже спорно. но альтернатива - сверхдорогое и ненадежное ручное тестирование)
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 09.01.2020 в 09:55.
Теги
cil, unit test

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 Debug: CIL and X++ mismatched DSPIC DAX: Программирование 3 30.09.2017 00:22
Workflow в realtime можно выполнить в AX2012? lvan DAX: Программирование 6 22.06.2016 18:52
AX2012: базовые типы и результаты операторов div и mod отличаются в X++ и в CIL gl00mie DAX: Программирование 0 25.09.2014 11:13
AX2012: Не компилируется CIL iCloud DAX: Программирование 9 30.07.2013 19:32
Dynamics AXBR: AX2012 – Common Intermediate Language (CIL) – (Parte I) Blog bot DAX Blogs 0 04.04.2013 09:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:57.