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 * /

Generator de cale cu validare de accesibilitate

![Generare cale] (docs/Path generation.bmp? Raw = true "generație cale cu validare accesibilitate")

În modelul de mai sus pentru a intra în v7, trebuie să setați valorile necesare ale variabilelor de gardă e5, e6, e7. Singura cale legală către v7 este de culoare verde. Pentru a seta un astfel de traseu folosind AStarPath, ar trebui să descriem un punct suplimentar v1, altfel ar fi generat un start greșit al traseului → v07 → v7 și va provoca o excepție în timpul rulării.

Folosind org.graphwalker.core.generator.ShortestPath în generarea căii, va fi suficient să specificați doar vârful final.

Este important să rețineți că căile generate pot conține doar vârfuri și margini unice, astfel încât un traseu precum A → B → A → C (cicluri sau bucle) nu va fi generat.

Model de metodă din fabrică pentru decuplarea implementării

Să presupunem că există un model alcătuit din multe sub-grafice individuale.

Cu implementările acestei scări, devine mai dificil să se ocupe de coliziunile de nume, precum și să se schimbe părțile individuale. Ca alternativă la această soluție, interfața ContextFactory va fi generată în sursele țintă/generate, prin implementarea acesteia, puteți decupla implementările sub-grafice.

Testele parametrizate pot reduce semnificativ dimensiunea modelului de test și, de asemenea, îl pot face mult mai lizibil. Zona dintre două stări special marcate va fi replicată pe atâtea teste automate separate, câte înregistrări sunt în setul de date. Testele automatizate parametrizate pot fi rulate în paralel, reducând astfel timpul total.

Diferite tipuri de parametrizare

Pentru parametrizare sunt disponibile atât margini separate, cât și părți ale graficului construite din mai multe margini și vârfuri.

Pentru a parametriza o singură margine, trebuie să editați eticheta acesteia în editorul yEd. Pentru a face acest lucru, puteți face clic dreapta pe marginea selectată și selectați „Adăugați etichetă”. Apoi, trebuie să inserați codul tabelului HTML. Din păcate, yEd nu oferă modalități convenabile de a crea astfel de tabele, așa că trebuie să editați codul HTML în editorul însuși. Citiți mai multe despre caracteristicile yEd aici și aici. Exemplul de tabel poate fi preluat de aici și copiat-lipit prin clipboard.

  • Set de date cu două rânduri cu parametri de etichetă și s_trg

  • Set de date cu mai multe rânduri cu etichetă, s_trg, parametri AB_test

Avertisment - Tipurile de date String, Boolean, Numeric (int/double) sunt acceptate numai. Doar un tip de date poate fi declarat pe coloană. Parametrul tipului String poate fi declarat ca un singur cuvânt sau, dacă este format din mai multe cuvinte, citat ca - „exemplu de șir de testare cu spații” .

Pentru a parametriza secțiunea liniară a graficului (cum ar fi tentaculul caracatiței), este necesar să conectați două puncte ale secțiunii grafului cu noua margine. Punctul de plecare sau setul de date rădăcină este un vârf care nu va fi parametrizat. Finalul este vârful care va fi parametrizat. Dar, în același timp, toate tranzițiile de la marginea respectivă nu vor mai fi parametrizate.

Singura diferență între o astfel de margine de conectare și versiunea anterioară este că nu este declarat nimic în ea, cu excepția codului tabelului HTML. Nu conține nici numele marginii, nici descrierea textului, nici greutatea sau alți parametri.

  • Set de date cu două rânduri cu parametri de etichetă și s_trg

Pentru toate elementele parametrizate - muchii și vârfuri din secțiunea graficului, inclusiv vârful final, biblioteca graphwalker va genera metode de genul acesta

Argumentele adecvate ale metodei vor fi transmise în runtime.