GitHub - avito-techgraphwalker Acesta este repo pentru instrumentul de testare bazat pe modele GraphWalker
Iată descrierea caracteristicilor adăugate.

Împărțiți în mai multe grafice cu același context
Preistoria acestei caracteristici este următoarea - în biblioteca însăși, este deja posibil să împărțiți modelul de testare în fișiere separate, conectându-le împreună folosind mecanismul SHARED de pași. Mai multe informații despre această caracteristică pot fi găsite pe site-ul dezvoltatorilor. Cu toate acestea, există unele dezavantaje ale utilizării SHARED. De exemplu, este dificil să controlați consistența SHARED tag-urilor. Dacă, din greșeală, va fi declarată o tranziție către nicăieri, va fi greu să depanăm un astfel de model.
Ca soluție care s-a adăugat capacităților bibliotecii - noi cuvinte cheie au fost adăugate la sintaxa descrierii modelului - INDEGREE și OUTDEGREE. Ce înseamnă:
- Adăugarea OUTDEGREE la vârf înseamnă că există o tranziție (margine) cu numele specificat de la acest vârf la un alt vârf dincolo de grafic.
- Adăugarea etichetei INDEGREE la vârf înseamnă opusul, și anume existența unei tranziții (margine) la vârful curent dintr-un grafic extern.
Funcționalitatea INDEGREE și OUTDEGREE ne oferă posibilitatea de a împărți graficul imens al modelului de testare în sub-grafice mici și clare. Atunci când executați mvn graphwalker: generate-sources - se construiește, o unire a tuturor graficelor într-un singur fișier temporar * .graphml și puneți-l în subdirectorul/link (resources). Graficul uniunii poate fi folosit:
- pentru a genera interfețe de cod care urmează a fi implementate;
- pentru a verifica modelul de consistență a testului;
- pentru a depana teste.
Modelul de testare, împărțit în subgrafe (comparativ cu modelul de testare „monolitic”) are o mai bună întreținere. De exemplu, în cazul unui conflict de îmbinare, va fi mult mai ușor să îl rezolvați într-un mic fișier sub-grafic, mai degrabă decât într-un singur fișier model de test monolitic, imens.
Folosind INDEGREE putem implementa câteva logici ediționale precum:
Pentru a nu duplica aceeași comandă pentru un set de tranziții în aceeași stare, precum și pentru a putea specifica comenzi similare pentru conexiunile OUTDEGREE → INDEGREE, a fost introdus cuvântul cheie SET.
![Exemplu SET] (docs/SET keyword.png? Raw = true "Exemplu SET cuvânt cheie")
Integrare simplificată a temporizatorului în vârfuri
Șablonul fișierului Java generat a fost modificat. Metodele de interfață generate pe baza vârfurilor returnează acum valoarea booleană. Astfel, orice metodă bazată pe vârf va rula până când logica interfeței revine adevărată sau expirată.
adnotare @code cu sintaxă YEd
![@code adnotare] (docs/code annotation.png? raw = true "@code adnotare")
În unele cazuri, informații despre elementul generat (margine sau vârf) sunt suficiente pentru a genera codul de implementare a interfeței. Iată cum va arăta codul generat pentru exemplul de mai sus.
Cu toate acestea, ar trebui să reținem că această caracteristică este destinată modelelor generate, nu create manual.
| numai în interiorul blocului de comentarii | v_Vertex/* @code myCheck () * / | @code myCheck () v_Vertex/* comentariu * / |
| punct și virgulă pentru a împărți | v_Vertex/* @code myCheck () orice comentariu * / | v_Vertex/* orice comentariu @code myCheck () * / |
| fără operatori logici în partea de sus | v_Vertex/* @code myCheck („Text”) * / | v_Vertex/* @code check1 () && check2 () * / |
| numai String, Number, Boolean. | v_Vertex/* @code myCheck („1”, „2”) * / | v_Vertex/* @code myCheck (- "2") * / |
| sau alte metode ca parametri | e_Edge/* @code myAction (String) valueOf (1)); * / | e_Edge/* @code myAction (Float) valueOf ("1.0")); * / |
| metodele cu aceleași nume returnează aceleași | v_Vertex/* @code myCheck () */e_Edge/* @code myAction ((Boolean) myCheck ()); * / | v_Vertex/* @code myCheck (Boolean) myAction ()) */e_Edge/* @code myAction (); * / |
| fără alte adnotări | v_Vertex/* *** TODO *** * / | v_Vertex/* @code * / |