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
Просмотров: 191
Размер:	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