Minunile nu se întâmplă sau am bate joc greșit vs cioturi

Mai jos, vom încerca să speculeze ce asemănările și diferențele lor, cum și de ce acestea sunt utilizate.

Verificați eficiența obiectului testat (sistem uder de testare - SUT) în două moduri: evaluarea stării obiectului sau a comportamentului său.

În primul caz, verificați funcționarea corectă a metodei SUT este de a evalua starea SUT, precum și obiecte care interacționează, atunci de asteptare aceasta metoda.

În al doilea rând, am testat kit și proceduri (metode de apel de obiecte care interactioneaza, alte metode SUT), care ar trebui să facă metoda SUT.

De fapt, dacă este scurt, într-un caz, un ciot. și celălalt Mock. Acestea sunt obiecte care sunt create si folosite pentru a înlocui obiecte reale cu care SUT în cursul activității lor.

Gerard Meszaros folosește termenul dublu test (dublor) ca notația pentru obiectul care înlocuiește obiectul real pe care SUT, în scopuri de testare.

Atunci când avem nevoie pentru a utiliza un dublu?

  • Teste de funcționare reduse de viteză cu obiecte reale (dacă, de exemplu, lucrul cu baze, fișiere, server de mail, etc.)
  • De fapt, necesitatea de a rula teste, indiferent de mediu (de exemplu, pe o mașină de la orice dezvoltator)
  • Sistemul, care folosește acest cod nu permite (sau da, dar este dificil de a face) pentru a rula cod cu un set de date de intrare specifice.
  • Nu există nici o modalitate de a verifica dacă SUT a funcționat bine, de exemplu, el nu schimbă starea, iar starea sistemului extern. Și există acest test făcut este dificil.

Gerard definește următoarele tipuri de inlocuiau:

- sunt obiecte care sunt transferate la metode, dar nu efectiv utilizate. Practic, această metodă parametri (cu excepția cazului în desigur, acestea nu afectează testul pe care vrem să verificați). Uneori este doar NUL

- obiecte care au punerea în aplicare internă, dar este de obicei puternic tăiate și nu pot fi utilizate în codul final.

- oferă un hard-codificate apeluri de răspuns în timpul testării. Folosit pentru a înlocui acele facilități care furnizează date de intrare SUT. Ele pot salva, de asemenea, un apel de informații (de exemplu, parametri sau numărul de apeluri) - sunt denumite uneori termenul său de testare Spy. Acest „înregistrare“ vă permite să evaluați performanța SUT, în cazul în care starea SUT nu este schimbat.

- obiecte care sunt stabilite (de exemplu, specifice fiecărui test) și se lasă să se stabilească așteptări ca un fel de caietul de sarcini de apel, pe care ne propunem pentru a obține

Mock'i ​​funcționează numai pe verificarea comportamentului tuturor acestor camere duble. Restul este de obicei folosit pentru a verifica starea. La momentul executării utilizării metodei SUT dublu nu este diferit. Dar Mock'i ​​necesită setări înainte de a rula și să permită evaluarea procesului de implementare.

In versiunea clasica a obiectelor modulare de testare reale ori de câte ori este posibil (cu excepția celor descrise mai sus). In Mokyr (mockist) varianta - toate Mokyr plus un obiect de test (SUT)

Care este utilizarea? Există argumente pro și contra pentru ambele.

Să luăm în considerare dezavantajele.

Folosind abordarea clasică folosind obiecte reale, în cazul unei erori într-una dintre metodele, „roșu“ vor fi toate testele, în care se utilizează această metodă (indiferent dacă acesta este testat în ele sau pur și simplu utilizat de un alt obiect). probleme de localizare poate fi o sarcină dificilă, în cazul în care testul scris, nu te-ai gândi granularitatea testului: minimul necesar pe plan intern.

Când orice mokirovanii și totul poate fi o altă problemă: teste de comportament rigid remediați punerea în aplicare internă a SUT. Ce și cum se numește cu ce argumente, ce API este folosit și etc Toate acestea face dificilă refactor, și posibilele modificări ale SUT - împreună cu toate testele necesare pentru a scrie codul de la zero.

Ceea ce este mai ușor, alegeți. Din experiența mea, aș spune că prefer clasici și mai ușor de înțeles (mulțumit de faptul că Martin Fowler de aceeași părere). Dar, cu mokirovaniem deoarece nu este crescut împreună.

Și, te rog, nu Mokyr nimic în testele de acceptare - totul trebuie să fie o viață, în caz contrar testele pe care vor fi înșelați. În mod repetat, convins de acest lucru din experiența personală.