Saya sedang berpikir tentang bagaimana saya dapat menggunakan tes unit dalam proyek MCU saya, dan kerangka kerja apa yang dapat saya gunakan untuk menyederhanakannya.
Hari ini saya menggunakan stm32 dengan OpenOCD-jtag dari PC Linux, di mana semuanya dikendalikan dari Makefile klasik dan dikompilasi dengan gcc.
Saya bisa membuat sesuatu sendiri, tetapi jika ada kerangka kerja yang bisa saya gunakan akan menyenangkan. (Ini adalah bonus jika kerangka kerja dapat menampilkan hasil dalam format yang dapat dibaca Jenkins / Hudson).
Apakah ada cara untuk menggunakan kerangka uji unit dengan stm32?
Jawaban:
Lihat CppUTest, dan http://pragprog.com/book/jgade/test-driven-devenment James Grenning yang luar biasa
CppUTest memiliki dukungan untuk C dan C ++, dan ia punya seperangkat template Makefile yang bagus yang membuat saya mulai dengan cepat.
sumber
Ada banyak variabel yang akan menentukan kerangka pengujian unit terbaik untuk digunakan dalam situasi Anda. Beberapa item yang dapat memengaruhi pilihan Anda adalah:
Sebagian besar kerangka kerja tipe xUnit akan memberikan tingkat fungsionalitas dasar yang mungkin berguna. Saya telah menggunakan Cunit dengan beberapa keberhasilan di masa lalu. (paket libcunit1-dev di Ubuntu / Debian). Sebagian besar kerangka kerja akan membutuhkan libc untuk tersedia, beberapa akan membutuhkan dukungan OS tambahan.
Alternatif lain yang panjangnya hanya 3 baris adalah Minunit .
Saya telah menemukan pengujian unit menggunakan mikrokontroler sebagai target untuk menjadi cukup rumit karena Anda harus dapat menyajikan lingkungan yang cocok untuk mengunduh tes, menjalankannya dan kemudian mendapatkan hasilnya kembali. Hanya mendapatkan platform di tempat yang akan memungkinkan Anda untuk melakukan ini adalah tugas besar.
Pendekatan lain yang telah saya ambil yang telah berhasil bagi saya adalah dengan melakukan pengujian unit pada host, menerapkan lapisan abstraksi antara driver dan kode aplikasi. Karena Anda menggunakan gcc untuk target, kode juga harus dikompilasi pada host.
Pengujian pada host kompilasi umumnya jauh lebih mudah karena Anda memiliki dukungan lengkap dari OS host dan semua alat-alatnya. Misalnya, ketika menguji pada host, saya memiliki versi mengejek driver nirkabel saya dengan antarmuka yang sama dengan driver nyata yang berjalan pada target. Versi host menggunakan paket UDP untuk mensimulasikan transfer paket nirkabel, dengan driver tiruan mendukung kemampuan untuk menjatuhkan paket sehingga saya dapat menguji protokol saya.
Pada produk yang saya kerjakan, OS ulir sedang digunakan, jadi lapisan abstraksi untuk pengujian pada OS host menggunakan pthreads sebagai gantinya.
Meskipun tidak sempurna, semakin mudah bagi Anda untuk menulis dan menjalankan tes, semakin besar kemungkinan Anda untuk menerapkan lebih banyak kasus uji. Manfaat lain dari menjalankan kode pada platform yang berbeda adalah untuk menguji bahwa kode tersebut portabel. Anda akan dengan cepat mengambil kesalahan endian jika arsitektur target dan host berbeda.
Saya sekarang sedikit keluar dari topik, tetapi merasa ide-ide ini dapat membantu dengan pilihan Anda kerangka uji dan metode pengujian.
sumber
Lihat embUnit http://embunit.sourceforge.net/embunit/index.html . Ini adalah kerangka uji unit C tertanam dengan jejak rendah.
Kami berhasil menggunakannya dalam beberapa proyek mikrokontroler tertanam. Jangan mengharapkan opsi dan fitur yang Anda dapatkan dengan kerangka uji unit desktop. Tapi itu pasti cukup kuat.
Ini memiliki banyak asersi yang ditentukan untuk Anda, jadi Anda tidak harus kehilangan banyak waktu untuk menulis asersi kustom seperti dengan minUnit.
sumber
Beberapa waktu yang lalu saya menulis tutorial menyeluruh tentang topik: Unit-testing (embedded) aplikasi C dengan Ceedling ; Saya menggunakan teknik ini dalam banyak proyek, dan sejauh ini saya cukup senang.
sumber
Saya hanya melihat ini sendiri. Saya menemukan artikel tiga bagian yang menguraikan kerangka uji unit di sini:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Saya juga setuju dengan semua yang disebutkan Austin.
sumber
Coba serat, tapi saya tidak berpikir untuk pengujian unit, untuk analisis kode.
sumber