UnitTest++ konfigurálása Linuxon NetBeans-ben

Posted by | · · · · · · | Szoftverfejlesztés | 2 hozzászólás UnitTest++ konfigurálása Linuxon NetBeans-ben című bejegyzéshez

Február óta a PTE Coding Dojo keretein belül néhány lelkes pécsi hallgató és hozzájuk csapódott fejlesztő elszántan gyakorolja a Clean Code és a TDD elveinek alkalmazását.

Eleinte C++ nyelven a UnitTest++ framework segítségével dolgoztunk, és ehhez a CodeBlocks fejlesztőkörnyezetet használtuk. Ez egyrészt nekem fapadosnak tűnt, másrészt a munkában már megszoktam a NetBeans-t, ezért bekonfiguráltam magamnak ez utóbbit. Ugyan azóta már váltottunk más nyelvekre és framework-ökre a Dojo-ban, de a beállítás nem volt teljesen triviális, ezért leírom, hátha másnak is jól jön egyszer.

A megvalósítandó cél tehát az volt, hogy Ubuntu Linuxon, NetBeans-ben tudjam futtatni ugyanazt a UnitTest++-os kódot, amit a többiek CodeBlocks-ban megírnak.

A NetBeans telepítésére nem szeretnék kitérni, feltételezem, hogy az olvasó rendelkezik egy működő példánnyal. (A saját környezetem: Ubuntu 12.04 x64, JDK 7u17, NetBeans 7.3)

Szükséges csomagok telepítése

A UnitTest++ library forráskódjának letöltéséhez szükség lesz svn-re, a lefordításához pedig g++-ra. Telepítsük ezeket, ha még nincsenek! (A UnitTest++ hivatalos oldalán javasolják ezt a módszert a release-ek használata helyett.)

Az svn és a g++ telepítéséhez parancssorba írjuk be a következőt: [kép]

sudo apt-get install subversion g++

majd gépeljük be a jelszavunk, és ha kér megerősítést a csomagok letöltéséhez, hagyjuk jóvá!

UnitTest++ forráskódjának letöltése

Nyissunk egy terminál (ha még nem lenne nyitva), navigáljunk abba a könyvtárba, ahová le szeretnénk tölteni a forrást, majd adjuk ki a parancsot: [kép]

svn co https://unittest-cpp.svn.sourceforge.net/svnroot/unittest-cpp unittest-cpp

Ezzel hozzájutottunk a legfrissebb verziójú teszt framework-höz [kép]. Lépjünk be a könyvtárba és fordítsuk le gyorsan! [kép]

cd unittest-cpp/UnitTest++/
make all

A fordítás sikerességéről és a tesztek lefutásáról üzenetet kapunk [kép]. Ha minden rendben ment, létrejött néhány fájl, többek között a libUnitTest++.a, erre lesz szükségünk [kép]. A terminálra a továbbiakban nem lesz szükségünk, zárjuk be és indítsuk el a NetBeans-t!

NetBeans konfigurálása

Ha c++-hoz lett letöltve a fejlesztőkörnyezet, vagy ha már telepítve van a c++ plugin, ez a bekezdés átugorható.

Nézzük meg, hogy telepítve van-e a c++ plugin:
Navigáljunk a Tools -> Plugins menüpontra, válasszuk az Installed fület, majd szűrjünk rá a ‘c++’ szóra. [kép] [kép]
Ha üres a találati lista, telepítenünk kell a c++ plugin-t. Ha már telepítve van, nyugodtan átugorhatjuk ezt a bekezdést!

Váltsunk át az Available Plugins fülre, szűrjünk rá a ‘c++’ szóra, pipáljuk be a C/C++ nevű plugin-t, majd alul kattintsunk az Install gombra [kép]. A felugró telepítő varázslót vigyük végig! Ha a végén újraindítást kér, tegyük meg, végül pedig ellenőrizzük, hogy tényleg feltelepült-e a plugin a fent leírt módon (Installed fül) [kép].

Projekt konfigurálása

Projekt létrehozása

Hozzunk létre egy új c++ projektet (File -> New Project -> C/C++ -> C/C++ Application). [kép] [kép]
Pipáljuk be, hogy hozzon létre egy main.cpp fájlt és egyelőre tesztek nélkül próbáljuk ki a fordítót egy Hello World alkalmazással: [kép]

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    cout<<"Hello World!"<<endl;
    return 0;
}

Ha futtatás után az Output ablakban megjelenik a “Hello World!” felirat, akkor mehetünk tovább.

UnitTest++ library hozzáadása a projekthez

Jobb klikk a projekten a Projects ablakban [kép] -> Properties -> Build -> Linker, [kép]
kattintsunk a Libraries melletti ‘…’ ikonra és a felugró ablakban az Add Library File gombbal [kép] tallózzuk be a libUnitTest++.a fájlt, amit a 3. bekezdésben hoztunk létre. [kép]

Az én esetemben ez volt az egyik fontos pont. Nálam csak az Add Library File-lal működött a dolog. Hozzá lehet adni más módokon is a library-t a projekthez, de valamiért úgy nem működött.

Tesztek és futtatás

Teszt fájl hozzáadása a projekthez

Itt már több út is van, azt írom le, ami nekem a legegyszerűbbnek tűnt.

Jobb klikk a projekten belül a Test Files mappán -> New C++ Simple Test … [kép] -> a felugró ablakban töltsük ki a hiányzó sorokat. [kép]

Test Name: FrameworkTest
Folder: tests
Test File Name: FrameworkTest.h

Ha megvan, kattintsunk a Finish-re.

Tesztek hozzáadása a teszt fájlhoz

A létrejött FrameworkTest.h fájlba írjuk be a következő sorokat: [kép]

namespace {
    TEST(ThisOneShouldFail) {
        CHECK_EQUAL(true, false);
    }
    TEST(ThisOneShouldPass) {
        CHECK_EQUAL(true, true);
    }
}

Ezen a ponton a NetBeans még pirossal aláhúz több sort, de az első futtatás után ez meg fog szűnni, egyelőre ne foglalkozzunk vele!

Teszt fájlok futtatása

Váltsunk át a main.cpp fájlra és a ‘return 0;’ sort cseréljük le a ‘return UnitTest::RunAllTests();’ sorra. Ekkor így néz ki a fájlunk: [kép]

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
    cout<<"Hello World!"<<endl;
    return UnitTest::RunAllTests();
}

Futtassuk a main.cpp fájlt!

A kimeneten azt kell látnunk, hogy két tesztet talált a framework és ebből egy futott le sikeresen, valamint a sikertelen tesztnél ki kell hogy írja, mi volt a várt és a kapott eredmény, valahogy így:

tests/FrameworkTest.h:4 error: Failure in ThisOneShouldFail: Expected 1 but was 0
FAILURE: 1 out of 2 tests failed (1 failures).
Test time: 0.00 seconds.

RUN FINISHED; exit value 1; real time: 0ms; user: 0ms; system 0ms

Ezzel készen is vagyunk. Innentől szabad az út, lehet próbálkozni, kinek mi jön be jobban, de egy működő módszerünk már van.
Ha most ránézünk a FrameworkTest.h fájlra, már nem jelzi hibásnak egyik sort sem. [kép]


2 hozzászólás

hron84 says:

2013. szeptember 7. at 21:56

Ubuntun celszeru a build-essential metacsomag telepitese, ugyanis peldaul a ‘make’ parancs sem kepezi az alapertelmezett telepites reszet (sem a desktop- sem a szerver verzioet). Raadasul a build-essential automatikusan telepiti az osszes olyan fejlec-csomagot is, amire az alapveto fejlesztesek eseteben szukseg lehet.

Reply

Futó Tamás says:

2013. szeptember 10. at 11:12

Ha jól látom, a g++ függőségként behúzza a gcc-t, ami pedig a make-et. Így ha valaki a blogbejegyzés szerint jár el, nem szabad, hogy gondja legyen ezzel.

Ennek ellenére teljesen egyetértek! A saját fejlesztői gépemen fent is van az említett build-essential csomag, de a cikk megírásához egy virtuális gépre frissen telepített ubuntut használtam, direkt azért, hogy fény derüljön ezekre a hibákra, valamint hogy csak a tényleg szükséges csomagok telepítését kérjem az olvasóktól.

Reply

Leave a comment