GitHub - avito-techgraphwalker Це репо для інструменту тестування на основі моделі GraphWalker

Ось опис доданих функцій.

репо

Розбийте на кілька графіків з однаковим контекстом

Передісторія цієї функції полягає в наступному - у самій бібліотеці вже можна розділити тестову модель на окремі файли, зв’язавши їх за допомогою механізму кроків SHARED. Більше інформації про цю функцію можна знайти на сайті розробників. Однак є деякі недоліки використання SHARED. Наприклад, важко контролювати узгодженість тегів SHARED. Якщо помилково буде оголошено про перехід у нікуди, буде важко налагодити таку модель.

Як рішення, що додало можливостей бібліотеки - нові ключові слова були додані до синтаксису опису моделі - INDEGREE та OUTDEGREE. Що це означає:

  • Додавання OUTDEGREE до вершини означає, що є перехід (ребро) із зазначеним іменем від цієї вершини до якоїсь іншої вершини поза графом.
  • Додавання мітки INDEGREE до вершини означає протилежне, а саме існування переходу (ребра) до поточної вершини з якогось зовнішнього графіка.

Функціональність INDEGREE та OUTDEGREE надає нам можливість розділити величезний графік тестової моделі на невеликі, чіткі підграфи. Під час запуску mvn graphwalker: generate-sources - він створює об'єднання всіх підграфів в один тимчасовий файл * .graphml і поміщає його в підкаталог/link (resources). Графік об'єднання може бути використаний:

  • генерувати кодові інтерфейси, що підлягають реалізації;
  • перевірити узгодженість тестової моделі;
  • для налагодження тестів.

Тестова модель, розділена на підграфи (порівняно з "монолітною" тестовою моделлю), має кращу ремонтопридатність. Наприклад, у випадку конфлікту злиття буде набагато простіше вирішити його в одному маленькому файлі підграфа, а не в одному величезному, монолітному файлі тестової моделі.

Використовуючи INDEGREE, ми можемо реалізувати деякі редакційні логіки, такі як:

Щоб не дублювати одну і ту ж команду для набору переходів в однаковий стан, а також мати можливість вказувати подібні команди для з’єднань OUTDEGREE → INDEGREE, було введено ключове слово SET.

![Приклад SET] (docs/SET keyword.png? Raw = true "Приклад ключового слова SET")

Спрощена інтеграція таймера у вершини

Шаблон згенерованого файлу Java змінено. Створені методи інтерфейсу на основі вершин тепер повертають логічне значення. Таким чином, будь-який метод, заснований на вершині, буде працювати доти, поки логіка інтерфейсу не поверне істину або не закінчиться час очікування.

Анотація @code із синтаксисом YEd

![@code анотація] (docs/code annotation.png? raw = true "@code annotation")

У деяких випадках інформації про генерований елемент (край або вершина) достатньо для генерації коду реалізації інтерфейсу. Ось як виглядатиме згенерований код для прикладу вище.

Однак слід зазначити, що ця функція призначена для згенерованих моделей, а не створених вручну.

Правило Правильний синтаксис Неправильний синтаксис
лише всередині блоку коментарів v_Vertex/* @code myCheck () * / @code myCheck () v_Vertex/* коментар * /
крапка з комою для розділення v_Vertex/* @code myCheck () будь-який коментар * / v_Vertex/* будь-який коментар @code myCheck () * /
немає логічних операторів зверху v_Vertex/* @code myCheck ("Текст") * / v_Vertex/* @code check1 () && check2 () * /
тільки рядок, число, булеве значення. v_Vertex/* @code myCheck ("1", "2") * / v_Vertex/* @code myCheck (- "2") * /
або інші методи як параметри e_Edge/* @code myAction ((String) valueOf (1)); * / e_Edge/* @code myAction ((Float) valueOf ("1.0")); * /
методи з однаковими іменами повертають те саме v_Vertex/* @code myCheck () */e_Edge/* @code myAction ((логічний) myCheck ()); * / v_Vertex/* @code myCheck ((логічне значення) myAction ()) */e_Edge/* @code myAction (); * /
ніяких інших анотацій v_Vertex/* *** TODO *** *// v_Vertex/* @code * /