Scrierea testelor de trimitere
Acest ghid conține informații care îi pot ajuta pe creatori să scrie cod corect pentru provocările lor. Setul de reguli a fost creat pentru a se asigura că fiecare provocare sau concurs este realizat într-un mod echitabil și de înaltă calitate. Astfel, experiența fiecărui utilizator va fi una plăcută și calitativă, fără probleme tehnice.
INFO
Există multe tipuri de provocări și, din acest motiv, unele reguli nu se aplică neapărat fiecăreia în parte. Cu toate acestea, aceste recomandări se aplică conținutului de pe platforma DojoCode, așa că ar fi bine să le citești și să încerci să le respecți pe cât posibil.
Reguli generale
Citește în avans! Așa cum s-a menționat în Regulile Generale de Codare, soluțiile sunt foarte importante și mențin calitatea provocării.
Verifică rezultatul! Testele ar trebui să verifice rezultatul soluțiilor, nu abordarea sau detaliile de implementare. Atunci când o soluție este corectă și îndeplinește toate cerințele, ea trebuie acceptată indiferent de modul în care a fost scrisă sau de detaliile de implementare.
Framework-ul contează! Unele limbaje folosesc un anumit tip de framework. Asigură-te că înțelegi și știi ce tipuri de framework folosește platforma atunci când scrii provocarea. Poți găsi mai multe informații în secțiunea referitoare la Limbaje din Ghid.
Fii organizat! Organizează și grupează testele în diferite grupuri sau subgrupuri. Poți numi aceste grupuri cu nume sugestive pentru a ajuta utilizatorul atunci când există mai multe teste.
Cunoaște-ți limbajul! Este foarte important să stăpânești informațiile înainte de a le transmite mai departe, așa că este de preferat să știi ce poate fi testat și ce nu.
Clar și la obiect! Formulează mesaje de eroare și de aserțiune scurte și clare. Astfel, utilizatorii pot înțelege ce au făcut bine sau greșit, fără să se piardă în detalii.
Păstrează un nivel redus! Menține numărul de intrări din rapoartele de testare rezonabil de mic.
Fii elegant! Testele ar trebui să gestioneze răspunsurile neșteptate într-un mod elegant.
Rapid și eficient! Rularea testelor nu ar trebui să dureze mult, de preferat nu mai mult de 3 secunde.
Independență! Testele ar trebui să fie independente.
Ia în considerare! Testele nu ar trebui să afișeze text în exces la ieșirea standard
Teste fixe
Testele fixe sunt teste cu intrări și ieșiri predeterminate, care nu se schimbă de la o rulare la alta.
Fiecare cerință trebuie să fie însoțită de un test fix care este în concordanță cu descrierea acesteia. Fiecare element al cerințelor provocării trebuie testat explicit cu cel puțin o aserțiune dedicată și etichetată corespunzător.
Testele fixe sunt de obicei mai ușor de depanat, așa că, într-un scenariu ideal, un test fix ar trebui să eșueze înainte ca provocarea să fie testată cu teste aleatorii.
Scopul testelor este de a verifica soluția atât pentru cazurile limită, cât și pentru cazurile care necesită o gestionare diferită în contextul sarcinii. Pentru a înțelege mai bine, dacă nu s-a menționat în descriere că aceste intrări nu trebuie luate în considerare:
- tablourile goale trebuie testate pentru problemele care implică tablouri cu lungimea 0.
- problemele care caută perechi de valori în tablouri și șirurile de caractere goale trebuie testate pentru problemele care implică tablouri cu lungimea 1.
Teste aleatorii
Chiar dacă testele aleatorii nu sunt atât de comune, este bine să le folosești. Scopul lor este de a respinge abordările nevalide bazate pe ghicirea intrărilor, hard-coding și alte fente. Cel mai important lucru pentru testele aleatorii este să facă valorile de retur așteptate și ordinea lor imprevizibile, astfel încât doar soluția corectă să poată trece testul.
Testele aleatorii generează cazuri de testare pentru toate scenariile care nu pot fi testate complet cu teste fixe. În unele cazuri, poate fi necesar să construiești diferite tipuri de generatoare de intrări aleatorii. Dacă un anumit tip de intrare are o șansă foarte mică de a apărea pur aleatoriu, este mai bine să construiești un generator aleatoriu specific care să forțeze acest tip de intrare, în loc să te bazezi pe 1000 de teste aleatorii și doar să speri că va apărea cazul respectiv. Poți lua în considerare ideea de a păstra un generator complet aleatoriu, deoarece acesta poate genera cazuri noi și neprevăzute.
Testele aleatorii ar trebui să fie concepute astfel încât să fie imposibil de trecut prin simpla numărare a cazurilor de testare. Cazurile nu ar trebui grupate după tipul de rezultat sau comportament, mai ales dacă rezultatul așteptat este o variabilă booleană sau când este vorba despre verificarea erorilor.
Păstrează numărul de teste aleatorii la un nivel rezonabil dacă nu le folosești pentru a verifica performanța soluțiilor utilizatorului.
Vei rula testele aleatorii după cele fixe. Nu toate framework-urile de testare permit o ordonare ușoară a testelor, dar testele fixe ar trebui să ruleze și, eventual, să eșueze înainte de cele aleatorii.
Folosește utilitarele de generare aleatorie adecvate, disponibile în limbajul tău. Învață cum să folosești generatoarele de numere aleatorii și cum să generezi aleatoriu tipurile de intrări de care ai nevoie, fie că este vorba despre numere într-un interval, numere mari, șiruri de caractere, numere întregi mari, valori în virgulă mobilă, colecții etc. Învață cum să faci eșantionare aleatorie a colecțiilor, cum să le amesteci și cum să eviți duplicatele.
Între rulări, testele de performanță ar trebui să fie consistente.
Încearcă să facilitezi depanarea testelor aleatorii dacă trebuie să te bazezi pe ele pentru a verifica în detaliu corectitudinea soluțiilor utilizatorului. Vor exista situații în care nu vei putea construi teste fixe într-un mod care să le permită utilizatorilor să descopere majoritatea lacunelor. Uneori, când testele aleatorii eșuează, depanarea poate fi foarte dificilă deoarece datele de intrare sunt foarte mari și nu pot fi citite ușor. Poți împărți testul aleatoriu în două loturi:
- Unul cu date de intrare mici, ușor de depanat.
- Celălalt cu valori de intrare mari și corespunzătoare. Reține că ambele părți ar trebui să conțină în continuare toate scenariile de aplicare.