Birim Testi C Kodu [kapalı]


853

Bu yaz düz C ile yazılmış gömülü bir sistem üzerinde çalıştım. Çalıştığım şirketin devraldığı mevcut bir projeydi. JUnit kullanarak Java birim testleri yazma alışmak oldukça alışılmış, ancak mevcut kod (yeniden düzenleme gerekli) yanı sıra sisteme eklenen yeni kod için birim testleri yazmak için en iyi yolu olarak bir kayıp oldu.

Orada birim test düz C kodu Java kod JUnit ile birim test kadar kolay yapan herhangi bir proje var mı? Özellikle gömülü gelişime (arm-linux platformuna çapraz derleme) uygulanacak herhangi bir içgörü büyük takdir edilecektir.



2
@zmo - Yazılım Önerileri , yazılım önerileri almak için Stack Exchange sitesidir. Kullanmadım, bu yüzden ne kadar iyi çalıştığını söyleyemem. Orada göndermeden önce kayıt kurallarını kontrol etmelisiniz.
Jonathan Leffler

Yanıtlar:


495

C'deki bir birim test çerçevesi Check ; C'deki birim test çerçevelerinin bir listesi burada bulunabilir ve aşağıda yeniden üretilmiştir. Çalışma zamanınızın kaç tane standart kütüphane işlevine bağlı olduğuna göre bunlardan birini kullanabilirsiniz veya kullanamayabilirsiniz.

AceUnit

AceUnit (Gelişmiş C ve Gömülü Ünite) kendisini rahat bir C kodu ünitesi test çerçevesi olarak faturalandırır. JUnit 4.x'i taklit etmeye çalışır ve yansıma benzeri yetenekler içerir. AceUnit, gömülü yazılım geliştirme gibi kaynak kısıtlama ortamlarında kullanılabilir ve daha önemlisi, tek bir standart başlık dosyası ekleyemeyeceğiniz ve ANSI / ISO C kitaplıklarından tek bir standart C işlevi çağıramadığınız ortamlarda iyi çalışır. Ayrıca bir Windows bağlantı noktası vardır. Yazarlar böyle bir özellik eklemeye ilgi duyduklarını ifade etseler de, sinyalleri yakalamak için çatal kullanmaz. AceUnit ana sayfasına bakın .

GNU Otomatik Birimi

Check ile aynı satırlar boyunca, birim testlerini ayrı bir adres alanında çalıştırmayı istemek de dahil olmak üzere (aslında, Check'in orijinal yazarı fikri GNU Autounit'ten ödünç aldı). GNU Autounit, GLib'i yoğun bir şekilde kullanır, bu da bağlamanın ve böyle özel seçeneklerin gerekli olduğu anlamına gelir, ancak özellikle GTK veya GLib kullanıyorsanız, bu sizin için büyük bir sorun olmayabilir. GNU Otomatik Birleştirme ana sayfasına bakın .

CUNIT

Ayrıca GLib kullanır, ancak birim testlerinin adres alanını korumak için çatal kullanmaz.

CUNIT

Win32 GUI uygulaması için planlar içeren Standart C. Ünite testlerinin adres alanını çatallandırmaz veya başka bir şekilde korumaz. Erken gelişimde. CUnit ana sayfasına bakın .

şirin

Kaynak ağacınıza bıraktığınız tek bir .c ve bir .h dosyası içeren basit bir çerçeve. CuTest ana sayfasına bakın .

CppUnit

C ++ için önde gelen birim test çerçevesi; C kodunu test etmek için de kullanabilirsiniz. Kararlı, aktif olarak geliştirilmiş ve bir GUI arayüzüne sahiptir. C için CppUnit kullanmamanın birincil nedenleri ilk önce oldukça büyük olması ve ikinci olarak testlerinizi C ++ 'da yazmanız gerekiyor, yani C ++ derleyicisine ihtiyacınız var. Bunlar endişe gibi gelmiyorsa, diğer C ++ birim test çerçeveleri ile birlikte kesinlikle dikkate değer. CppUnit ana sayfasına bakın .

embUnit

embUnit (Embedded Unit), gömülü sistemler için başka bir birim test çerçevesidir. Bunun yerini AceUnit aldı. Gömülü Ünite ana sayfası .

MinUnit

Minimal bir makro seti ve hepsi bu kadar! Mesele, kodunuzu birim olarak test etmenin ne kadar kolay olduğunu göstermektir. MinUnit ana sayfasına bakın .

Bay Ando için CUnit

Oldukça yeni ve görünüşte hala erken gelişme aşamasında olan bir CUnit uygulaması. Bay Ando için CUnit ana sayfasına bakın .

Bu liste en son Mart 2008'de güncellenmiştir.

Daha fazla çerçeve:

CMocka

CMocka, sahte nesneleri destekleyen C için bir test çerçevesidir. Kullanımı ve kurulumu kolaydır.

CMocka ana sayfasına bakın .

kriter

Ölçüt, otomatik test kaydını, parametreli testleri, teorileri destekleyen ve TAP ve JUnit XML dahil olmak üzere birden çok formata çıkış verebilen çapraz platform C birimi test çerçevesidir. Her test kendi işleminde yürütülür, böylece sinyaller ve çökmeler gerektiğinde raporlanabilir veya test edilebilir.

Daha fazla bilgi için Ölçüt ana sayfasına bakın .

HWUT

HWUT, C için büyük desteği olan genel bir Birim Test aracıdır. Makefiles oluşturmaya, minimal 'yineleme tablolarında' kodlanmış büyük test senaryoları oluşturmaya, eyalet makinelerinde yürümeye, C-saplamaları oluşturmaya ve daha fazlasına yardımcı olabilir. Genel yaklaşım oldukça benzersizdir: Kararlar 'iyi stdout / kötü stdout'a dayanmaktadır. Ancak karşılaştırma fonksiyonu esnektir. Bu nedenle, kontrol için herhangi bir komut dosyası tipi kullanılabilir. Standart çıktı üretebilen herhangi bir dile uygulanabilir.

HWUT ana sayfasına bakın .

CGreen

C ve C ++ için modern, taşınabilir, diller arası birim test ve alay çerçevesi. İsteğe bağlı bir BDD gösterimi, bir alay kütüphanesi, tek bir işlemde (hata ayıklamayı kolaylaştırmak için) çalıştırma yeteneği sunar. Test fonksiyonlarını otomatik olarak keşfeden bir test koşucusu mevcuttur. Ancak kendi programlı olarak kendiniz oluşturabilirsiniz.

Tüm bu özellikler (ve daha fazlası) CGreen kılavuzunda açıklanmıştır .

Wikipedia, Birim test çerçeveleri listesi altında C birim test çerçevelerinin ayrıntılı bir listesini verir : C


Başlangıçta, Check çok sağlam görünüyor. Gerçek kullanım ateşi altında nasıl durduğunu görmem gerekecek ... ama kesinlikle faturaya uyabilecek gibi görünüyor.
Paul Osborne

8
Gömülü sistemlerimizde birim test kodunu kontrol ediyoruz. Çoğunlukla kontrol iyi bir seçim oldu ama şimdi uClinux üzerinde çalışan sistemler üzerinde çalışıyoruz ve kontrol çatal gerektirdiğinden bu sistemlerde çalışmıyor. : /
David Holm

1
@labyrinth Ubuntu'daki sürüm 2002'den kalmadır. En güncel sürüm bu yıldan (bu yorumun 2014 itibariyle). Kaynaktan derlemek zorunda kaldım.
Barry Brown

4
HWUT, sabit sürücülerle etkileşim kuran modüller için testler yazmak istiyorsanız oldukça kullanışlı olan uzaktan kumandalı saplamalar oluşturur. Bu sürücüler çoğu durumda bir PC'de mevcut değildir. HWUT Belgeleri
Frank-Rene Schäfer

1
Göre çek Github Sayfa , son sürümüdür 0.11.0yayınlandı Aralık 17, 2016 .
Mandeep Sandhu

164

Şahsen Google Test çerçevesini beğendim .

C kodunu test etmedeki gerçek zorluk, harici modüllere olan bağımlılıkları kırmaktır, böylece kodu birim olarak izole edebilirsiniz. Bu, eski kod etrafında testler almaya çalışırken özellikle sorunlu olabilir. Bu durumda genellikle kendimi testlerde saplama işlevlerini kullanmak için bağlayıcıyı kullanarak bulurum.

İnsanların " dikişler " hakkında konuştukları şey budur . C'de tek seçeneğiniz bağımlılıklarınızı taklit etmek için ön işlemciyi veya bağlayıcıyı kullanmaktır.

C projelerimden birinde tipik bir test takımı şöyle görünebilir:

#include "myimplementationfile.c"
#include <gtest/gtest.h>

// Mock out external dependency on mylogger.o
void Logger_log(...){}

TEST(FactorialTest, Zero) {
    EXPECT_EQ(1, Factorial(0));
}

Başlık dosyasını değil, aslında C dosyasını eklediğinizi unutmayın . Bu, tüm statik veri üyelerine erişim avantajı sağlar. Burada benim logger (ki logger.o olabilir ve boş bir uygulama vermek) alay. Bu test dosyası kod tabanı geri kalanından bağımsız olarak derler ve bağlantılar ve tek başına yürütülür anlamına gelir.

Kodu çapraz derlemeye gelince, bunun çalışması için hedefte iyi tesislere ihtiyacınız var. Bunu bir PowerPC mimarisi üzerinde Linux'a derlenen googletest cross ile yaptım. Bu mantıklı çünkü orada sonuçlarınızı toplamak için tam bir kabuk ve işletim sistemi var. Daha az zengin ortamlar için (tam bir işletim sistemi olmadan herhangi bir şey olarak sınıflandırırım), sadece ana bilgisayar üzerinde oluşturmalı ve çalıştırmalısınız. Testleri derlemenin bir parçası olarak otomatik olarak çalıştırabilmek için bunu yine de yapmalısınız.

Ben test C ++ kodu genellikle OO kodu genellikle prosedürden çok daha az bağlı olması nedeniyle çok daha kolay (tabii ki bu kodlama tarzı çok bağlıdır). Ayrıca C ++ 'da, dikişleri başka şekilde kapsüllenmiş koda almak için bağımlılık enjeksiyonu ve yöntem geçersiz kılma gibi hileler kullanabilirsiniz.

Michael Feathers'ın eski kodu test etmek için mükemmel bir kitabı var . Bir bölümde, kesinlikle tavsiye ettiğim OO olmayan kodlarla başa çıkma tekniklerini ele alıyor.

Düzenleme : GitHub kaynak kullanılabilir birim test prosedür kodu hakkında bir blog yazısı yazdım .

Edit : Pragmatik Programcılar özellikle tavsiye birim test C kodu adresleri çıkan yeni bir kitap var .


17
Prag'ı satın alma. prog kitabı. Bu sorunun cevaplarında olmayan herhangi bir içgörü içermiyor.
Phil

3
C ve C ++ üst üste binme olduğunu biliyorum, ama sonuçta bir C derleyicide derlenecek kod üretirken bir C ++ test kitaplığı kullanmak için iyi bir fikir olarak beni grev değil.
Rafael Almeida

2
@RafaelAlmeida özünde katılıyorum, burada gösterdiğim şey, C'yi bir extern C'ye sarmadan bir önişlemci dikişi. Buna rağmen, C ++ 'ı pratikte bir test tanımlama dili olarak oldukça kullanışlı buldum. Ayrıca test için C tabanlı bir çerçeve yazdım, bu yüzden bu konuda dogmatik değilim :-) github.com/meekrosoft/fff
mikelong

@Phil katılmıyorum. Kitabın çok değerli olduğunu gördüm, özellikle de C'de güçlü olmayan biri için
CHendrix

Yukarıda belirtildiği gibi HAL işlevlerini alay etmek için Fake Function Framework kullanıyorum. GTest ile çok iyi çalışır. github.com/meekrosoft/fff
Leonardo

135

Minunit inanılmaz derecede basit bir birim test çerçevesidir. Ben avr için birim test c mikrodenetleyici kodunu kullanıyorum.


5
Gömülü sistemler konusunda deneyimim yok, bu yüzden bu konuda yorum yapamam, ancak küçük C programları (okul, senaryolar) için bu mükemmel görünüyor. Harika bağlantı.
AndrewKS

3
@toasted_flakes Bunu bir github özüne yaptım
Sam

Bu, burada aramaya başlamadan önce bulduğum şeye oldukça yakın! TEST'in (işlev adı, gövde) işlevi oluşturması ve işleve bir işaretçi depolaması için testi otomatikleştirmek istiyorum, ancak bazı harici işlemlere ihtiyacım olacak gibi görünüyor.
Ben Kushigian

41

Şu anda CuTest birim test çerçevesini kullanıyorum:

http://cutest.sourceforge.net/

Çok hafif ve basit olduğu için gömülü sistemler için idealdir. Hedef platformda olduğu gibi masaüstünde de çalışmamda sorun yaşamadım. Birim testlerini yazmanın yanı sıra, tek gereken:

  • CuTest yordamlarını çağırdığınız her yere eklenen bir başlık dosyası
  • görüntüye derlenecek / bağlanacak tek bir ek 'C' dosyası
  • birim testleri ayarlamak ve çağırmak için ana bazı basit kod eklendi - Ben sadece derleme sırasında UNITTEST tanımlanmışsa derlenmiş özel bir main () işlevi var.

Sistem bir yığın ve bazı stdio işlevlerini desteklemelidir (tüm gömülü sistemlerin sahip olmadığı). Ancak kod, platformunuzda yoksa, bu gereksinimlere alternatif olarak çalışabileceğiniz kadar basittir.

Extern "C" {} bloklarının bazı makul kullanımları ile C ++ testinin iyi yapılmasını da destekler.


1
CuTest için oyu ikinci vereceğim. Nintendo DS'de homebrew geliştirmek için kullanıyorum ve kurulumunu yaparken veya kullanırken herhangi bir zorluk çekmedim.
Theran

Ben üçüncüyüm. 1.4 sürümündeyken indirdim ve XML'e dökmek için değiştirdim. İndirmem ve bakmam gereken 1.5 sürümü var gibi görünüyor.
Taylor Price

2
CuTest, bir QNX sisteminde çalışan kodu test etmem için iyi çalıştı.
Jace Browning

JUnit gibi çalıştığını iddia ediyor, ama özledim Beforeve Afterçağırıyorum. Sonuçta, şirin.
Dragas

40

Ratkok ile neredeyse aynı diyorum ama birim testlere gömülü bir bükülmeniz varsa ...

Birlik - Birim testi C kodu için şiddetle tavsiye edilen çerçeve.

Kitaptaki gömülü C için iş parçacığı TDD'sinde bahsedilen örnekler Unity (ve CppUTest) kullanılarak yazılmıştır.


5
CMock kullanarak otomatik sahte oluşturma ile birlikte birlik oldukça iyidir.
thegreendroid

cmock için iyi bir öğretici önerebilir misiniz?
melwin_jose

Ceedling tarafından yönetilen CMock ve Unity için çok iyi bir öğretici var: dmitryfrank.com/articles/unit_testing_embedded_c_applications
Dmitry Frank

35

Ayrıca libtap'a bir göz atmak isteyebilirsiniz , Test Anything Protocol (TAP) çıktısını veren ve böylece bu teknoloji için çıkan çeşitli araçlarla iyi entegre olan bir C test çerçevesi olan . Çoğunlukla dinamik dil dünyasında kullanılır, ancak kullanımı kolaydır ve çok popüler hale gelir.

Bir örnek:

#include <tap.h>

int main () {
    plan(5);

    ok(3 == 3);
    is("fnord", "eek", "two different strings not that way?");
    ok(3 <= 8732, "%d <= %d", 3, 8732);
    like("fnord", "f(yes|no)r*[a-f]$");
    cmp_ok(3, ">=", 10);

    done_testing();
}

Kendi projelerim için kendi libtap-eşdeğerimi elle yuvarladım, ama şimdi bunun var olduğunu bildiğime göre, artık benimkini korumak zorunda kalmayacağım. Güzel!
ephemient

1
ok(TESTING==IsSimple(), "libtap is super easy to use")
AShelly

26

Cmocka adı verilen sahte nesneleri destekleyen C için zarif bir birim test çerçevesi vardır . Sadece standart C kütüphanesini gerektirir, bir dizi bilgi işlem platformunda (gömülü dahil) ve farklı derleyicilerle çalışır.

Ayrıca Alt Ünite, Herhangi Bir Şeyi Test Protokolü ve jUnit XML raporları gibi farklı mesaj çıktı formatları için destek vardır.

cmocka, gömülü platformlarda da çalışmak üzere oluşturuldu ve ayrıca Windows desteğine sahip.

Basit bir test şöyle görünür:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that does nothing and succeeds. */
static void null_test_success(void **state) {
    (void) state; /* unused */
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_success),
    };
    return cmocka_run_group_tests(tests, NULL, NULL);
}

API tam olarak belgelenmiştir ve çeşitli örnekler kaynak kodunun bir parçasıdır.

Cmocka ile başlamak için LWN.net: C'de sahte nesnelerle birim testi makalesini okumalısınız.

cmocka 1.0 Şubat 2015'te piyasaya çıktı.


3
Cmockery ve cmocka'ya baktığımda belgeler benzer görünüyor. Bu projeler ilgili mi?
Matt Friedman

6
cmocka, cmockery'nin halefidir. Çatalladım çünkü bakımsız.
asn

21

İşlevleri taklit etmenin bir yolunu aramaya başlamadan önce eski bir C uygulamasını test edemedim. Başkalarından test etmek istediğim C dosyasını izole etmek için alaylara ihtiyacım vardı. Cmock'u denedim ve benimseyeceğim.

Cmock başlık dosyalarını tarar ve bulduğu prototiplere dayalı olarak sahte işlevler üretir. Mocks, bir C dosyasını mükemmel bir şekilde test etmenizi sağlar. Tek yapmanız gereken test dosyanızı gerçek nesne dosyalarınız yerine alaylarla bağlamaktır.

Cmock'un bir diğer avantajı, alaycı işlevlere geçirilen parametreleri doğrulayacağı ve alaycıların hangi dönüş değerini sağlaması gerektiğini belirtmesidir. Bu, işlevlerinizdeki farklı yürütme akışlarını test etmek için çok yararlıdır.

Testler, beklenti oluşturduğunuz tipik testA (), testB () işlevlerinden oluşur ve ekleri test etmek ve kontrol etmek için çağrı işlevlerinden oluşur.

Son adım birlik testleriniz için bir koşucu oluşturmaktır. Cmock birlik testi çerçevesine bağlıdır. Birlik, diğer herhangi bir birim test çerçevesi kadar kolay öğrenilir.

Denemeye değer ve kavraması oldukça kolay:

http://sourceforge.net/apps/trac/cmock/wiki

Güncelleme 1

Araştırdığım diğer bir çerçeve Cmockery.

http://code.google.com/p/cmockery/

Birim testi ve alaycılığı destekleyen saf bir C çerçevesidir. Ruby'ye (Cmock'in aksine) bağımlılığı yoktur ve dış kütlelere çok az bağımlılığı vardır.

Kod oluşturmadığı için alayları ayarlamak için biraz daha manuel çalışma gerektirir. Prototipler çok fazla değişmeyeceğinden, mevcut bir proje için çok fazla iş göstermez: alaylarınızı aldıktan sonra, bir süre onları değiştirmeniz gerekmez (bu benim durumum). Ekstra yazma alayların tam kontrolünü sağlar. Eğer sevmediğiniz bir şey varsa, sadece alayınızı değiştirirsiniz.

Özel bir test çalıştırıcısına gerek yok. Sadece bir dizi test oluşturmanız ve bunu bir run_tests fonksiyonuna geçirmeniz yeterlidir. Burada biraz daha manuel çalışma da var ama kesinlikle bağımsız bir özerk çerçeve fikrini seviyorum.

Ayrıca bilmediğim bazı şık C numaraları içeriyor.

Genel Cmockery başlamak için alay biraz daha anlayış gerekir. Örnekler bunun üstesinden gelmenize yardımcı olacaktır. Daha basit mekaniklerle işi yapabilir gibi görünüyor.


8
Cmockery'nin halefi olan cmocka.org'a bir göz atmalısınız!
asn

cmock için iyi bir öğretici önerebilir misiniz?
melwin_jose

LWN makalesi ile başlayın ve sonra cmocka örnek dizinini kontrol edin.
Kasım'da asn

16

Bir C newbie olarak, C'deki Test güdümlü geliştirme adlı slaytları çok yararlı buldum . Temel olarak, herhangi bir dış bağımlılık olmaksızın bir mesaj vermek için standardı assert()birlikte kullanır &&. Birisi tam bir yığın test çerçevesine alışıksa, bu muhtemelen yapmayacaktır :)


Ben is_spare () işlevindeki böcek tarafından çok rahatsız oldu ... ama bağlantı için teşekkürler! Sanırım TDD TÜM hataları yakalamıyor.
Jis Ben

Bu, C için gördüğüm en basit TDD yaklaşımıdır, assertek kütüphaneler veya çerçeve olmadan takip edebilirsiniz . Bence sadece bir acemi iseniz, bu bir başlangıç ​​noktası olabilir.
kabirbaidhya

16

Kolay kullanılabilirlik ve taşınabilirlik için CHEAT ( GitHub'da barındırılan ) yazdık .

Bağımlılığı yoktur ve kurulum veya yapılandırma gerektirmez. Yalnızca bir başlık dosyası ve bir test senaryosu gereklidir.

#include <cheat.h>

CHEAT_TEST(mathematics_still_work,
    cheat_assert(2 + 2 == 4);
    cheat_assert_not(2 + 2 == 5);
)

Testler, testleri yürütmeye ve sonuçlarını rapor etmeye özen gösteren bir yürütülebilir dosyada derlenir.

$ gcc -I . tests.c
$ ./a.out
..
---
2 successful of 2 run
SUCCESS

Çok güzel renkleri var.


Pretty Colo (U)
RS

12

Orada CUNIT

Ve Gömülü Birimi Gömülü Klima Sistemi birim test çerçevesidir. Tasarımı JUnit ve CUnit ve daha fazlasından kopyalandı ve daha sonra Gömülü C Sistemi için biraz uyarlandı. Gömülü Ünite std C lbs gerektirmez. Tüm nesneler sabit alana tahsis edilir.

Ve Tessy gömülü yazılımın test birimi otomatik hale getirir.


1
Denedim embunitve hayal kırıklığına uğradım.
Craig McQueen

1
Örneğin, gönderdiğim bir hata raporuna ve 3 yıl boyunca işlem görmemiş başka bir hata raporuna bakın.
Craig McQueen

12

Bir çerçeve kullanmıyorum, sadece otomatik araçları "kontrol et" hedef desteğini kullanıyorum. Bir "ana" uygulayın ve onaylayıcı (lar) kullanın.

Benim test dirim Makefile.am (lar) aşağıdaki gibi görünüyor:

check_PROGRAMS = test_oe_amqp

test_oe_amqp_SOURCES = test_oe_amqp.c
test_oe_amqp_LDADD = -L$(top_builddir)/components/common -loecommon
test_oe_amqp_CFLAGS = -I$(top_srcdir)/components/common -static

TESTS = test_oe_amqp

2
Autotools kullanmıyoruz (bir noktada hareket etmek güzel olurdu). Tarihsel olarak, test için ana yöntemi kullandım ve kötü bir çözüm değil.
Paul Osborne

11

Michael Feather'ın "Eski Kod ile Etkili Çalışma" kitabı C gelişimi sırasında birim testine özgü birçok teknik sunuyor.

Başka bir yerde görmediğim C'ye özgü bağımlılık enjeksiyonu ile ilgili teknikler var.



6

Kullandığım CxxTest gömülü C / C ++ ortamında (esas olarak C ++) dir.

Test çalıştırıcısını oluşturmak için bir perl / python komut dosyası olduğundan CxxTest'i tercih ederim. Kurulumu yapmak için küçük bir eğimden sonra (test çalıştırıcısını yazmanız gerekmediğinden daha küçük), kullanımı oldukça kolaydır (örnekler ve yararlı belgeler içerir). En çok iş kod etkin bir birim / modül test böylece erişir 'donanım' kurmak oldu. Bundan sonra yeni birim test senaryoları eklemek kolaydır.

Daha önce de belirtildiği gibi, bir C / C ++ birim test çerçevesidir. Yani bir C ++ derleyicisine ihtiyacınız olacak.

CxxTest Kullanım Kılavuzu CxxTest Wiki


Eğer gerekmez derleyici c olabilir ++ ama yine C. CxxTest olabilir test ediyoruz kod kullanımı çok kolay bir çerçevesidir
David Sykes


5

Minunit'i okuduktan sonra, daha iyi bir yolun, savunma programı tekniğine çok benzer bir şekilde kullandığım iddia makrosuna dayandığını düşündüm. Bu yüzden aynı Minunit fikrini standart iddia ile karıştırdım. K0ga'nın blogunda çerçevemi (iyi bir isim NoMinunit olabilir) görebilirsiniz


Şimdi projemde utest.h dosyasını kullanıyorum. İyi çalışır ve yeterince yardımcı olur. Teşekkürler!
Johan



4

Google'ın mükemmel bir test çerçevesi vardır. https://github.com/google/googletest/blob/master/googletest/docs/primer.md

Ve evet, gördüğüm kadarıyla düz C ile çalışacaktır, yani C ++ özellikleri gerektirmez (C ++ derleyicisi gerektirebilir, emin değilim).


Google'ın çerçevesi saf C ile çalışır mı? Sayfaya hızlı bir bakış, bunun bir C ++ çerçevesi olduğunu gösterir.
Dana

4
Google Test mükemmel, ancak bu bir C ++ çerçevesi. Oldukça taşınabilir ve eğer gerekiyorsa C'yi test etmek için kullanılabilir.
Josh Kelley



2

JUnit hakkında bilginiz varsa CppUnit'i öneririm. http://cppunit.sourceforge.net/cppunit-wiki

Bu birim testleri yapmak için c ++ derleyicisine sahip olduğunuzu varsayar. değilse, Adam Rosenfield ile kontrol etmek istediğinizi kabul etmeliyim.


6
Soru C ile ilgili değil, C ++ değil
1800 BİLGİ

3
Hayır, ancak C ++ C kitaplıklarına arabirim oluşturabilir. Bu yüzden aslında C kütüphanelerini bir C ++ birim test çerçevesi kullanarak test etmek mükemmel olabilir. (Bu arada şirketim bu şeyi yapıyor ve C birim test çerçevelerini kullanmaktan çok daha kolay.)
Kevin

Ben de aynı şeyi yapıyorum. C ++ ile C ++ kodumuzun ve komut dosyası dillerinin altında kullandığımız bir yardımcı program kütüphanemiz var. Testler için CppUnit kullanıyoruz ve hem C hem de C ++ için aynı çerçeveyi kullanabildiğimiz için oldukça iyi çalışıyor.
Jyaan

2

Hedefi test etmeden önce PC'ye gömülü kod için bazı birim testleri yapmak için RCUNIT kullandım . İyi bir donanım arayüzü soyutlama önemlidir endianness ve bellek eşlemeli kayıtlar sizi öldürecek.



2

API Sağlık Kontrolü - C / C ++ kütüphaneleri için test çerçevesi:

Paylaşılan bir C / C ++ kütüphanesi için temel birim testlerinin otomatik oluşturucusu. Başlıklardaki bildirimlerin analizi yoluyla parametreler için makul (çoğu, ama ne yazık ki hepsi değil) giriş verileri üretebilir ve API'deki her işlev için basit ("akıl sağlığı" veya "sığ" -kalite) test senaryoları oluşturabilir. Dosyalar.

Oluşturulan testlerin kalitesi, basit kullanım durumlarında kritik hataların yokluğunu kontrol etmeyi sağlar. Araç, oluşturulan testleri oluşturabilir ve yürütebilir ve çökmeleri (segfaultlar), iptalleri, her türlü yayılan sinyali, sıfır olmayan program dönüş kodunu ve program asılı tespit edebilir.

Örnekler:


1

Kullanılacak bir teknik, C ++ xUnit çerçevesiyle (ve C ++ derleyicisiyle) birim test kodunu geliştirirken, hedef sistemin kaynağını C modülleri olarak koruyarak geliştirmektir.

Mümkünse C kaynağınızı çapraz derleyiciniz altında düzenli olarak otomatik olarak birim testlerinizle derlediğinizden emin olun.


1

LibU ( http://koanlogic.com/libu ), açık test paketi / vaka bağımlılıkları, test izolasyonu, paralel yürütme ve özelleştirilebilir bir rapor biçimlendiricisine izin veren bir birim test modülüne sahiptir (varsayılan biçimler xml ve txt'dir).

Kütüphane BSD lisanslıdır ve diğer birçok yararlı modülü içerir - ağ oluşturma, hata ayıklama, yaygın olarak kullanılan veri yapıları, yapılandırma, vb.




0

Hâlâ test çerçeveleri peşindeyseniz , CUnitWin32 Win32 / NT platformlarından biridir.

Bu, diğer test çerçevelerinde karşılaştığım temel bir sorunu çözer. Yani global / statik değişkenler deterministik durumdadır, çünkü her test ayrı bir işlem olarak yürütülür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.