Com escriure un marc mínim de proves unitàries en C ++

Bloc

Com escriure un marc mínim de proves unitàries en C ++

Per a les coses que hem d’aprendre abans de poder fer-les, aprenem fent-les. - Aristòtil



react native-app-intro-slider

O

Els darrers mesos m’he dedicat a l’aprenentatge estructures de dades i algoritmes en benefici de la meva carrera. Amb formació en enginyeria elèctrica, no eren exactament els meus punts forts. A més, després d’haver treballat a la indústria del programari des de fa un parell d’anys, he après moltes coses fent coses.



Com a exercici, vaig decidir desenvolupar un F _funcional _ T _emplatar _ EL ibrary (Semblant a STL) com el meu proper projecte. D'aquesta manera, podria explorar conceptes de programació funcional i maneres d'escriure'ls en C ++.

Ara, si he après alguna cosa de l’experiència, és que per petit que sigui el vostre projecte, sempre el proveu.



Amb una cerca ràpida a Internet, us adonareu que a C ++ no falten els marcs de proves. Marcs populars com GTest , CppUnit , o Boost.Test ofereixen funcions riques i permeten escriure accessoris. Alguns fins i tot admeten burles en el seu marc.

Per a un projecte com aquest, aquests marcs són excessius. Tot el que volia era un marc bàsic que puc incloure com a fitxer de capçalera i no preocupar-me per construir una biblioteca o enllaçar-la amb el projecte.

Llavors, quin és el camí a seguir? Escriu-ne un tu mateix!

En aquesta publicació, us mostraré com podeu escriure un marc de proves d’unitat petit i només de capçalera C ++ en menys de 70 línies de codi amb només quatre macros.


Quan es tracta d’ocultar el codi de la placa de la caldera, macros són els vostres salvadors. Faciliten la concentració en proves d’escriptura mitjançant l’abstracció de detalls sobre el marc.

Començarem amb un compte de les quatre macros.

  1. BEGIN_TEST construeix un entorn de prova prenent en compte un seguint i a mètode el nom com a arguments. Aquí podeu afegir els requisits previs necessaris per configurar casos de prova. En el nostre cas, obre una funció de prova i defineix una variable booleana per emmagatzemar el resultat.
  2. END_TEST conclou l'entorn de proves retornant el resultat de la comparació: qualsevol cert o bé fals .
  3. EXPECT_EQ compara el valor esperat amb el valor real retornat de la funció que es prova.
  4. RUN_TEST crida un cas de prova dins del main. Podeu afegir sentències per comprovar si la prova es passa imprimint a la consola, recopilar estadístiques o fins i tot mesurar els temps d'execució de la vostra funció aquí.
#include #include #define BEGIN_TEST(TestSuite, TestName) bool test__##TestSuite##__##TestName(void) { bool isTrue{true}; #define END_TEST return isTrue; } #define EXPECT_EQ(arg1, arg2) isTrue &= (arg1 == arg2); #define RUN_TEST(TestSuite, TestName) { bool ret = test__##TestSuite##__##TestName(); std::cout << std::left << std::setfill('-') << std::setw(50) < ' #TestName ' '; if(ret) { std::cout << std::setw(10) << std::left << 'x1b[38;5;40m OK x1b[0m' /* colored in Green*/ << std::endl; } else { std::cout << std::setw(10) << std::left << 'x1b[38;5;160m FAILED x1b[0m' /* colored in Red*/ << std::endl; } } /* Coloring valid for *nix systems. */

#testing # cpp11 # unit-testing #cpp #c

començar amb l’òxid

levelup.gitconnected.com

Com escriure un marc mínim de proves unitàries en C ++

Un marc funcional de proves unitàries de C ++ en menys de 70 línies de codi