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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.07.2023, 15:35   #1  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
? SysTestSuiteTTS - сломан?
Привет.
В рамках 2009 Аксапты, в случае использования SysTestSuiteTTS, как результата выполнения функции createSuite класса-теста наследника от SysTestCase, система некорректно обрабатывает сценарии отклонения от целевого результата. При выполнении тест-функции - "вываливается", откатывая транзакцию до ближайшего try catch. В случае запуска проекта тестирования через ПКМ по заголовку проекта обработки try catch просто нет...отсюда выполнение кода просто прерывается.
При запуске через форму SysTestToolbar какой-то там инфолог выходит, можно сказать, что работает. Согласно открытой документации перекрытие createSuite является корректным решением и непонятно, почему данный сценарий запуска тестов содержит такую проблему, кто-то ранее встречал её?

Т.е.:
Создаем тестовый проект.
Создаем какой-то класс-тест, наследник от "SysTestCase" в проекте.
X++:
class SysTestCaseIssueExampleTest extends SysTestCase
{
}
public void testTrueIfExpectedTrue()
{
    ;
 
    this.assertTrue(false);
}
Запускаем тест через ПКМ по заголовку проекта и по результатам выполнения получим - тест не пройден, результат* выполнения функции testTrueIfExpectedTrue отличается от ожидаемого.
*Формат вывода результатов может варьироваться исходя из конфигурации модуля, будем считать, что там указан инфолог.
Добавляем уровень изоляции в рамках транзакции, необходимый атрибут при работе с БД - перекрываем createSuite:
X++:
public SysTestSuite createSuite()
{
    ;

    return new SysTestSuiteTTS(this);
}
Результат выполнения - ничего.
Меняем код функции testTrueIfExpectedTrue:
X++:
public void testTrueIfExpectedTrue()
{
    ;
 
    this.assertTrue(true);
}
Получаем инфолог - тест пройден.
Можно конечно в рамках каждой тестовой функции делать обертку самому (ttsBegin, ttsAbort), но MS же реализовали класс-инструмент перекладывающий ответственность с программиста на ядро тестового модуля...

Последний раз редактировалось Товарищ ♂uatr; 06.07.2023 в 16:31.
Старый 07.07.2023, 01:02   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Проект-исправление во вложении.
Убрал транзакционную обертку в "internalRunExecutable" и всю реализацию завязал на перекрытый метод "addTest", создающий нового наследника от "SysTest" - "SysTestTTS".

PS функция "setUpTestCase" в рамках "коробочной" версии, как оказалось, вовсе небезопасная. Исправление которой - шаг назад к исходной проблеме.
Вложения
Тип файла: xpo SharedProject_SysTestSuiteTTSIssueFix.xpo (8.3 Кб, 42 просмотров)

Последний раз редактировалось Товарищ ♂uatr; 07.07.2023 в 01:11.
За это сообщение автора поблагодарили: Logger (3), gl00mie (5).
 


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

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

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