⚡ Don't build this 12V DC to 120V AC inverter circuit.
Cuprins:
Prioritizăm principiile de arhitectură orientată pe servicii la Invers. Asta înseamnă că avem componente mici, de întreținut, cu responsabilități clar definite. Ei comunică unul cu celălalt (în cea mai mare parte), prin transferul de stat reprezentant sau REST, API.
Acest lucru oferă flexibilitate și ne-a ajutat bine, cu excepția unei fațete semnificative: Testarea. Când se testează, trebuie evitate:
- Dependența de serviciile externe care rulează pe aceeași mașină.
- Teste lente.
Deoarece aplicațiile se bazează în mod inerent pe servicii externe, este esențial să existe o strategie de testare pentru aceste dependențe.
Recent am început să folosim Bypass și voi explica cum am ajuns acolo și în mod specific cum îl folosim.
Trecutul
Modificați metodele și returnați câteva exemple de date, cum ar fi:
Asta a fost (și cred că este încă) "calea de parcurs" în lumea Ruby / Rails. Din păcate, acest lucru favorizează un comportament rău, după cum cel mai bine explicat aici, de José Valim.
Apoi am început să folosim ExVCR, care este o mare bibliotecă, dar are și dezavantaje similare cu mocks / stubs: încurajează lenea și nu favorizează separarea preocupărilor care sunt critice pentru API-urile bine definite. ExVCR permite înregistrarea și redarea datelor live. Este foarte ușor să se integreze (inclusiv câteva rânduri din testul dvs. și orice altceva este îngrijit). Dar, în mod ideal, trebuie să vă gândiți la dependențele externe ale testelor, nu să le eliminați. S-ar putea să fie o opțiune viabilă pentru scenarii atunci când comportamentul punctului final ar trebui testat cu un minim de cheltuieli generale (îl folosim pentru testarea apelurilor la serviciile AWS ale Amazonului, cum ar fi S3).
Introduceți adaptoarele
Adaptorii lucrează excelent și promovează deliberarea în jurul contractelor API și limitele clar definite de comunicare. Încă mai folosim această abordare, mai ales când adaptorul este mai complex (cum ar fi un soclu JSON-RPC).
Acesta este modul în care un adaptor ar putea arăta:
Dar, pentru simple puncte de referință HTTP, adaptoarele par a fi o mulțime de lucruri și au un dezavantaj major: părăsesc bibliotecile pe care le consumă din ecuația de testare. Dacă se schimbă ceva în bibliotecile HTTP sau JSON, testele nu o vor prinde. Valoarea codului critic pentru producție care nu este testată de această abordare este inacceptabilă.
Prezentul și viitorul
Bypass-ul ne permite să începem un server web foarte simplu în teste care simulează serviciile externe pe care le folosim.
Acum, putem testa întreaga stivă, inclusiv biblioteca HTTP, biblioteca de codare / decodare JSON și mecanisme de autentificare. Bypass README este bine scris, așa că voi economisi detalii de implementare. Cu toate acestea, modificăm puțin modul în care îl folosim pentru a menține testele concise și lizibile:
În primul rând, uneori dorim să apelăm la Facebook atunci când testele sunt executate ca o suită de integrare completă. Facem acest lucru neregulat pentru a ne asigura că API-ul Facebook încă funcționează conform așteptărilor noastre. adăugare
- include integrarea
la
testul de amestec
nu simulează API ci, în schimb, solicită serviciului extern (linii 5, 7).
Suntem explicit atunci când simulează cererile pentru servicii externe, astfel încât fiecare test care utilizează Bypass trebuie să aibă
@tag facebook_bypass
(linia 7).
În cele din urmă,
handle_fb
(liniile 30-39) este numit (având în vedere că
request_path
chibrituri). Îmi place împerecherea în capul funcției, deoarece explică în ce mod ne reacționăm și ne permite să definim diferite funcții pentru diferite căi.
Deci, Bypass rulează numai cu teste etichetate cu
@tag: bypass
și când nu ne conducem suita de integrare. Un lucru pe care îl facem în timp ce setăm Bypass este permiterea etichetei să treacă printr-un id de pagină (linii 8, 20). Deci, aici este modul în care un test care utilizează Bypass arată în toată gloria sa:
După cum puteți vedea,
facebook_bypass
tag-ul explică faptul că simulăm API (dacă nu suntem în modul de integrare). Aceasta ne permite să transmitem informații API-ului simulat și este foarte ușor să reutilizăm aceeași configurare Bypass pentru diferite teste.
Sper că acest lucru vă ajută să testați API-uri externe. Mă puteți găsi pe Twitter (vedeți mai jos) dacă aveți întrebări suplimentare.
Dacă Furnizorul dvs. de servicii Internet vă înșurubează, Iată cum puteți lupta înapoi
Serviciul de internet din S.U.A. este ca și guvernul: scump, lent și monopolizat. Dar această comparație este destul de ironică, deoarece guvernul poate fi cea mai bună speranță împotriva furnizorilor de servicii de internet care vă servesc un sandwich de rahat. Procurorul General al New York-ului, Eric T. Schneiderman, a lansat un site web pentru a ...
Aeroportul LaGuardia din NYC suge atît de greu încât îl sfîșie și începe de la început
LaGuardia, acel aeroport din New York, care nu-și dă seama că mănâncă un păcătos rupt în durerea veșnică la fiecare poarta de plecare, este în cele din urmă rupt pentru a face loc unei versiuni care nu ar putea suge prea tare. Rapoartele Verge prevăd un plan de 4 miliarde de dolari pentru a construi un singur terminal unificat, care să cuprindă toate serviciile ...
Falcon 9 SpaceX testează focul în pregătirea pentru revenirea în spațiu
Lucrările nu s-au terminat pentru racheta Falcon 9, care a aterizat într-o donație în luna mai. Joi, SpaceX a adus prima etapă a platformei Falcon 9 la instalația din Texas, iar testul a tras toate cele 1,7 milioane de lire sterline ale motoarelor sale. Unul dintre scopurile principale ale SpaceX este de a produce rachete reutilizabile, iar testul pare să fie ...