Ilovaning ba'zi qismlari Arduino API -ni ishlatmaydi
Birinchi holda (bizda a_plus_b va a_minis_b bor) hamma narsa aniq - bu dasturning toza C / C ++ da yozilgan qismlari. Ehtimol, bu qandaydir matematik, algoritmik yoki tizimli bloklar. Ular Arduino -da tuzilgan va ishlaganidek, ular xuddi ish stoli tizimida qo‘shimcha imo -ishoralarsiz taqqoslash bilan ishlaydilar. Ammo, hatto ular bilan ham, platformalar orasidagi farqni unutmang (yuqorida biz AVR chipida 16-bitli intning to‘lib ketishi tufayli hamma narsa 32-bitli o‘tganda muvaffaqiyatsiz bo‘lgan testni ko‘rib chiqdik. PIC32 va 64-bitli ish stoli Intel / AMD) ... Sinovlarni yozishda va vaqti -vaqti bilan maqsadli qurilmada testlarni o‘tkazishda bu farqlarni hisobga olish kerak.
Ilovaning bir qismi Arduino API -dan foydalanadi
Ikkinchi holatda (bizda led_on_even bor), vaziyat yanada qiziqroq ko‘rinadi. Aytaylik, biz boshqa harakatlarga qo‘shimcha ravishda mahalliy digitalRead yoki digitalWrite arduino orqali boshqaruvchi uskunasiga kiradigan funktsiyani sinab ko‘rmoqchimiz. Ish stoli tizimidagi standart libc kutubxonalarida digitalRead va digitalWrite yo‘qligi aniq, bu dastur bloki xuddi shunday tuzilmaydi, bundan ham kamroq boshlanadi (va noutbukda GPIO pinlari qayerda?). Nima qilish kerak? Haqiqatan ham, Arduino platalari emulyatorini yoki simulyatorini qidirib, qandaydir tarzda bu baxtni o‘z loyihangizga tortish mumkinmi? X86 uchun Arduino manbalarini kompilyatsiya qilasizmi? AVR chip simulyatorini yozib qo‘yingmi, uning barcha ichki registri oshxonasi va haydovchilari bilan?
Taxminan shunday fikrlar boshimdan o‘tib ketdi, men qandaydir tarzda oddiy ish stolida Arduno uchun maxsus yozilgan ilovaning muhim qismini ishga tushirishim kerak deb o‘ylaganimda. Biroq, uni hal qilishning birinchi amaliy qadamlari deyarli muammoning ko‘lami haddan tashqari oshirib yuborilganligini ko‘rsatdi. Aytmoqchimanki, umuman muammo yo‘q.
Ha, biz ishlatadigan har bir Arduino API qo‘ng'irog'i uchun biz o‘z stubimizni loyihaga qo‘shamiz: biz bir xil nom va imzo bilan funktsiyani e'lon qilamiz (qaytish turi va argumentlari), unga o‘z dasturimizni qo‘shamiz. Yo‘q, stubning bajarilishi asl daraxtga yoki asl Arduino uskunasiga hech qanday aloqasi yo‘q. Ba'zi hollarda, stub hech qanday kodsiz bo‘sh funktsiyani ko‘rsatishi mumkin.
Hamma bilishi mumkinki, har xil turdagi testlar mavjud: birlik, regressiya, integratsiya va boshqalar. Birlik sinovlari ishlab chiquvchilarning o‘zlari tomonidan qo‘llaniladi va o‘zgartirishlar kiritilgandan so‘ng funksionallik buzilganligini tezda tekshirish imkonini beradi.
Loyihani ishlab chiqishning dastlabki bosqichida biz bunday sinovsiz uzoqqa bormasligimizni angladik. Va biz, tabiiyki, mavjud echimlarni o‘rganganimizdan so‘ng, C -da birliklarni sinab ko‘rish uchun engil, engil ramka ishlab chiqdik. Bizning fikrimizcha, ramka eng qulay sintaksisga ega edi.googletest... Afsuski, bu ramka C ++ tiliga tegishli va biz aniq C testlarini yozishni xohlardik, shuning uchun ham shunga o‘xshash sintaksisga amal qilib, biz C uchun analog ishlab chiqdik.
Bu ramka juda muvaffaqiyatli bo‘lib chiqdi, chunki bir tomondan, u o‘zi nomlangan platformadan hech narsa talab qilmaydi, faqat arxitektura uchun setjmp va longjmp funktsiyalari, boshqa tomondan, u qulay sintaksisga ega. Kichik talablar tufayli, ishchi muhit bo‘lmasa, bu tizim O‘rnatilgan tizimlar rivojlanishining dastlabki bosqichlarida osongina qo‘llanilishi mumkin. Shuning uchun biz nafaqat ishlab chiqilgan dasturiy modullar uchun, balki apparat komponentlarini, masalan, apparat taymerlarini sinab ko‘rish, shuningdek tizim funktsiyalarini tekshirish, masalan, yadroda ip yaratish uchun testlardan faol foydalanamiz.
Mavzuni yaratish va bajarish uchun funktsiyalarning ishlashini tekshirishga misol:
TEST_CASE("is thread_create should return -EINVAL if thread function NULL") {
struct thread *t;
t = thread_create(0, NULL, NULL);
test_assert_equal(err(t), -EINVAL);
}
Internet manbalari ro‘yxati:
https://habr.com/ru/company/embox/blog/239387/
https://habr.com/ru/post/419445/
Do'stlaringiz bilan baham: |