Professional Documents
Culture Documents
1
Oleh:WaskitaAdijarto
DaftarIsi
1. TutorialMembuatTemplateCUnite.....................................................................................................1 1.1. 1.2. Buat1direktoriuntukmenampungprojectini,misalkandirektoriD:/kuliah/pengendalipintu2 PersiapanCUnit.............................................................................................................................2
3.
IntegrasiCUnitdenganFSM .................................................................................................................9 .
1. TutorialMembuatTemplateCUnite
1 TutorialCUnit
1.3.BuatC/C++projectdiNetbeans
PilihmembuatC/C++ApplicationdiNetbeans
2 TutorialCUnit
Tambahkanfilefiledaridirektoricunitkeprojectini.DapatmenggunakanklikkanandiSourceFiles, kemudianpilihAddExistingItemfromFolderatauAddExistingItem.
3 TutorialCUnit
DaftarfilesetelahditambahlibraryCUnit
* 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