You are on page 1of 11

TutorialMembuatUnitTest DenganFramworkCUnit padaIDENetbeans6.9.

1
Oleh:WaskitaAdijarto

DaftarIsi
1. TutorialMembuatTemplateCUnite.....................................................................................................1 1.1. 1.2. Buat1direktoriuntukmenampungprojectini,misalkandirektoriD:/kuliah/pengendalipintu2 PersiapanCUnit.............................................................................................................................2

1.1.1. DownloadsourcecodeCUnitdihttp://sourceforge.net/projects/cunit/,URLfile http://sourceforge.net/projects/cunit/files/CUnit/2.12/CUnit2.12src.tar.bz2/download.............2 1.1.2. 1.1.3. BukafileCUnit2.10src.tar.gzkesuatudirektori,misalnyaCUnit2.12...........................2 Buatdirektoripengendalipintu/cunituntukmenaruhfilefileCUnityangakandipakai....2

1.1.4. KopifilefileberikutdariCUnit2.12/CUnitataudirektoridibawahnya,diletakkanke direktoricunit:......................................................................................................................................2 1.3. 2. BuatC/C++projectdiNetbeans ...................................................................................................2 .

Penjelasanisifilemain.c.......................................................................................................................6 2.1. 2.2. 2.3. Pengantar......................................................................................................................................6 SuitedanFungsiTest....................................................................................................................7 FungsiTestinguntukregistrasifungsitesting...............................................................................7

3.

IntegrasiCUnitdenganFSM .................................................................................................................9 .

1. TutorialMembuatTemplateCUnite

1 TutorialCUnit

1.1.Buat1direktoriuntukmenampungprojectini,misalkandirektori D:/kuliah/pengendalipintu 1.2.PersiapanCUnit


1.1.1. DownloadsourcecodeCUnitdihttp://sourceforge.net/projects/cunit/,URLfile http://sourceforge.net/projects/cunit/files/CUnit/2.12/CUnit2.12 src.tar.bz2/download 1.1.2. BukafileCUnit2.10src.tar.gzkesuatudirektori,misalnyaCUnit2.12 1.1.3. Buatdirektoripengendalipintu/cunituntukmenaruhfilefileCUnityangakan dipakai 1.1.4. KopifilefileberikutdariCUnit2.12/CUnitataudirektoridibawahnya,diletakkan kedirektoricunit: semuafile*.hdariCUnit2.12/CUnit/Headers Automated.cdariCUnit2.12/CUnit/Sources/Automated *.cdariCUnit2.12/CUnit/Sources/Framework Basic.cdariCUnit2.12/CUnit/Sources/Basic Daftarfileyangsudahselesaidikopi:

1.3.BuatC/C++projectdiNetbeans
PilihmembuatC/C++ApplicationdiNetbeans

2 TutorialCUnit

Untukprojectlocationdisesuaikandengannamadirektoriyangdipilihuntuklokasiprojectiniditahap 1.1diatas. UntukProjectNamebebas.

Tambahkanfilefiledaridirektoricunitkeprojectini.DapatmenggunakanklikkanandiSourceFiles, kemudianpilihAddExistingItemfromFolderatauAddExistingItem.

3 TutorialCUnit

DaftarfilesetelahditambahlibraryCUnit

Masukkan program berikut untuk menggantikan isi main.c /* 4 TutorialCUnit

* File: main.c * Author: waskita * * Created on March 6, 2011, 4:26 PM */ #include <stdio.h> #include <stdlib.h> #include "../cunit/Basic.h" #include "../cunit/Console.h" #include "../cunit/Automated.h" int InitSuiteFSM() { return 0; } int CleanSuiteFSM() { return 0; } void TestFSMAwal() { } /* * */ int Testing(void); int main(int argc, char** argv) { Testing(); return (EXIT_SUCCESS); } int Testing(void) { CU_ErrorCode error; if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); CU_TestInfo test_fsm[] = { {"Test Kondisi Awal", TestFSMAwal}, CU_TEST_INFO_NULL, }; CU_SuiteInfo suites[] = { { "FSM", InitSuiteFSM, CleanSuiteFSM, test_fsm}, CU_SUITE_INFO_NULL, };

5 TutorialCUnit

error = CU_register_suites(suites); /* Run all tests using the basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); printf("\n"); CU_basic_show_failures(CU_get_failure_list()); printf("\n\n"); /* Run all tests using the automated interface */ CU_automated_run_tests(); CU_list_tests_to_file(); /* Run all tests using the console interface */ // CU_console_run_tests(); /* Run all tests using the curses interface */ /* (only on systems having curses) */ // CU_curses_run_tests(); /* Clean up registry and return */ CU_cleanup_registry(); return CU_get_error(); }

Compileprogram(bisadarimenuRun>BuildMainProject:atauF11),seharusnyatidakmuncul pesankesalahan.Jikaterjadipesanerror,perbaikidulu.

2. Penjelasanisifilemain.c
2.1.Pengantar
#include <stdio.h> #include <stdlib.h> KodediatasadalahheaderstandarC.Dipakaiuntukprintf(); #include "../cunit/Basic.h" #include "../cunit/Console.h" #include "../cunit/Automated.h" KodediatasadalahheaderfileuntuklibraryCUnit intTesting(void); KodediatasadalahfunctionprototypeuntukfungsiTesting(); Untukkerapianprogram,sebaiknyasemuafungsidiberifunctionprototypesebelumdigunakan. intmain(intargc,char**argv){ Testing(); 6 TutorialCUnit

return(EXIT_SUCCESS); } Kodediatasadalahfungsimain.HanyamemanggilfungsiTesting()yangakanmenjalankansemuatest.

2.2.SuitedanFungsiTest
PadaCUnit,pengujianterbagimenjadi1ataulebihSuite,dimanasetiapsuitedapatterdiridari beberapafungsipengujian.Pembagiansuitedanfungsipengujianterserahkepadaprogrammer,namun hendaknyadibuatterstruktursupayamudahdipahami. Padacontohinidibuat1suitebernamatest_fsmdan1testbernamaTestFSMAwal. SetiapsuitemempunyaibagianInitdanClean.Initfungsinyamempersiapkansistemuntukmelakukan test,Cleanuntukmelakukanpembersihansetelahpengujian.Persiapanmisalkanmengisidatabase dengandatatertentu,Cleanmisalnyaadalahmenghapusfilefiletemporaryyangdihasilkansystem namunsudahtidakdipakailagi. InitdilakukandifungsiInitSuiteFSM() CleandilakukandifungsiCleanSuiteFSM() PengujiandilakukandifungsiTestFSMAwal() Padacontohinisemuafungsimasihkosong int InitSuiteFSM() { return 0; } int CleanSuiteFSM() { return 0; } void TestFSMAwal() { }

2.3.FungsiTestinguntukregistrasifungsitesting
FungsiTesting()diadopsidaricontohkodedihttp://cunit.sourceforge.net/example.html Isifungsiinisecaraumumada4bagian: Persiapan Registrasifungsipengujian.Padabagianinidilakukanpendaftaranfungsifungsiyangberisi pengujian Registrasisuite.Padabagianinidilakukanpendaftaransuiteyangadapadapengujian Eksekusipengujian:menjalankanpengujianyangsesungguhnya. 7 TutorialCUnit

Keempattahaptersebutdapatdilihatpadabagianberikut: int Testing(void) { // bagian persiapan CU_ErrorCode error; if (CUE_SUCCESS != CU_initialize_registry()) return CU_get_error(); // registrasi fungsi pengujian CU_TestInfo test_fsm[] = { {"Test Kondisi Awal", TestFSMAwal}, CU_TEST_INFO_NULL, }; // registrasi Suite CU_SuiteInfo suites[] = { { "FSM", InitSuiteFSM, CleanSuiteFSM, test_fsm}, CU_SUITE_INFO_NULL, }; // eksekusi pengujian error = CU_register_suites(suites); /* Run all tests using the basic interface */ CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests(); printf("\n"); CU_basic_show_failures(CU_get_failure_list()); printf("\n\n"); /* Run all tests using the automated interface */ CU_automated_run_tests(); CU_list_tests_to_file(); /* Run all tests using the console interface */ // CU_console_run_tests(); /* Run all tests using the curses interface */ /* (only on systems having curses) */ // CU_curses_run_tests(); /* Clean up registry and return */ CU_cleanup_registry(); return CU_get_error(); } Berikutinioutputprogramhasilpengujian:

8 TutorialCUnit

PadaoutputtersebutNampakbahwaada1suiteyangaktif,dan1pengujianyangaktif.Semua pengujiandinyatakanPassedartinyatidakadakesalahan.

3. FSM
PadabagianinidijelaskanFSMsederhanayangdibuat. UntuktutorialinidibuatsebuahFSMsederhanadengan3state(STATE_1,STATE_2,STATE_3),tanpa input.Carakerjanya: DariSTATE_1,akanmelakukantransisikeSTATE_2 DariSTATE_2,akanmelakukantransisikeSTATE_3 DariSTATE_3,akanmelakukantransisikeSTATE_1

Implementasidenganfilecommon/fsm.cdancommon/fsm.h Isifilecommon/fsm.cadalahsebagaiberikut: #include "fsm.h" void fsm(int *state, int *input) { switch (*state) { case STATE_1: { *state = STATE_2; break; } case STATE_2: { *state = STATE_3; break; } 9 TutorialCUnit

case STATE_3: { *state = STATE_1; break; } } } Isifilecommon/fsm.hadalahsebagaiberikut: /* * File: fsm.h * Author: waskita * * Created on March 6, 2011, 5:45 PM */ #ifndef FSM_H #define FSM_H #ifdef __cplusplus extern "C" { #endif #define STATE_1 1 #define STATE_2 2 #define STATE_3 3 void fsm(int *state, int *input); #ifdef } #endif #endif __cplusplus

/* FSM_H */

4. IntegrasiCUnitdenganFSM
PadabagianinidijelaskanpengujianFSMsederhanadenganCUnit. UntukmengujiFSM,lakukanperubahansebagaiberikut: Masukkancommon/fsm.ckedalamproject Tambahkancommon/fsm.hdiincludepadafilemain.c #include"../common/fsm.h" 10 TutorialCUnit

ModifikasifungsiTestFSMAwal()sebagaiberikut: void TestFSMAwal() { int state = 0; int input = 0; state = STATE_1; fsm(&state, &input); CU_ASSERT(state == STATE_2); state = STATE_2; fsm(&state, &input); CU_ASSERT(state == STATE_3); state = STATE_3; fsm(&state, &input); CU_ASSERT(state == STATE_1); } Penjelasan: Barisiniadalahpersiapanstateyangakanditest: state = STATE_1; BarisselanjutnyamenjalankanFSMdengankeadaanstate=STATE_1 fsm(&state, &input); Barisselanjutnyamengecekapakahstateselanjutnyasesuaidenganharapan,yaituSTATE_2 CU_ASSERT(state == STATE_2); Demikiandiulangiuntukstatelainnnya.JikaadaCU_ASSERTyanghasilnyatidaksesuai,makapada waktudijalankanakanmunculpesankesalahan.CUnitjugaakanmelaporkanjumlahtestyangdijalankan danjumlahtestyanggagal. DaftarCU_ASSERTlainnyadapatdibacadidokumentasiCUnityaitudifileCUnit2.1 2/doc/writing_tests.html

11 TutorialCUnit

You might also like