GitHub - avito-techgraphwalker Acesta este repo pentru instrumentul de testare bazat pe modele GraphWalker

Iată descrierea caracteristicilor adăugate.

github

Î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.

Regula Sintaxă dreaptă Sintaxă greșită
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 * /