Soru Boost.Test: Çalışan bir Trivial olmayan Test Suite örneği arıyoruz / Eğitmen [kapalı]


Boost.Test belgeleri ve örnekler gerçekten önemsiz olmayan örnekler içermiyor gibi görünüyor ve şimdiye kadar bulduğum iki öğretici İşte ve İşte yardımcı olurken hem oldukça basit.

Tüm proje için bir ana test paketine sahip olmak isterim, bağımsız olarak çalıştırılabilen ünite test ve modüllerinin modül takımları için bakım yaparken. Ayrıca çeşitli ağ kenarlarını test etmek için sahte bir sunucu kullanacağım.

Ubuntu 8.04'teyim, ama yine de kendi makefillerimi yazdığımdan herhangi bir örnek Linux veya Windows alacağım.

Düzenle

Bir test olarak aşağıdakileri yaptım:

// test1.cpp
#define BOOST_TEST_MODULE Regression
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test1_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(2 < 1);
}

BOOST_AUTO_TEST_SUITE_END()

// test2.cpp
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test2_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(1<2);
}

BOOST_AUTO_TEST_SUITE_END()

Sonra derledim: g++ test1.cpp test2.cpp -o tests

Bu bana bağlantı sırasında bir bazilyon "çoklu tanımı" hatalar hakkında verir.

Hepsi tek bir dosyada olduğunda iyi çalışıyor.


32
2018-05-25 15:29


Menşei


tek başlık varyantıUTF'nin kullanıyorsunuz, sadece tek bir dosya için çalışıyor. Bu 'küçük detay' belgeli: Bu varyant, çoklu dosya test modülü ile kullanılamaz. - Andreas Belke


Cevaplar:


Boost.Test ile C ++ Birim Testi

Yukarıdaki parlak bir yazı ve gerçek Boost belgelerinden daha iyi.

Düzenle: 

Ayrıca bir Perl yazısı yazdım.   makefile ve projeyi otomatik oluştur   sınıf isimleri listesinden iskelet,   "all-in-one" testi de dahil olmak üzere   suit ve tek başına test paketi   her sınıf. Denir    makeSimple ve indirilebilir   Sourceforge.net'ten.

Temel problemi bulduğum şey, testlerinizi birden fazla dosyaya bölmek istiyorsanız, önceden derlenmiş test çalışma zamanına karşı bağlantı kurmanız ve Boost.Test'in "yalnızca başlıkları" versiyonunu kullanmamanızdır. Eklemek zorundasın #define BOOST_TEST_DYN_LINK Her bir dosyaya ve örneğin Boost başlıklarını eklerken <boost/test/unit_test.hpp> yerine <boost/test/included/unit_test.hpp>.

Yani tek bir test olarak derlemek için:

g++ test_main.cpp test1.cpp test2.cpp -lboost_unit_test_framework -o tests

veya bireysel bir testi derlemek için:

g++ test1.cpp -DSTAND_ALONE -lboost_unit_test_framework -o test1

.

// test_main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE Main
#include <boost/test/unit_test.hpp>

// test1.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test1_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(2<1);
}

BOOST_AUTO_TEST_SUITE_END()

// test2.cpp
#define BOOST_TEST_DYN_LINK
#ifdef STAND_ALONE
#   define BOOST_TEST_MODULE Main
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(test2_suite)

BOOST_AUTO_TEST_CASE(Test1)
{
    BOOST_CHECK(1<2);
}

BOOST_AUTO_TEST_SUITE_END()

43
2018-05-25 18:55



Bağlantınızı, sayfanın üst tarafına işaret edecek şekilde düzenleyebilecekseniz yorumlarınız olmasa da harika olurdu. - danio
@danio: Bağlantıyı düzenledik ve makefile, proje iskeleti ve birim test süitlerini otomatik olarak oluşturacak bir Perl betiğine bir link ekledik. - Robert S. Barnes
Bence bu da iyi: ibm.com/developerworks/aix/library/au-ctools1_boost/index.html - zack


Daha sonraki derste olandan başka neye ihtiyacın olduğunu bilmiyorum. İhtiyacım olan her şeyi sadece bu şekilde yaptım. Açıklamanızı da anladığımdan emin değilim.

İstediğiniz bir şey, test programınızda birden fazla .cpp dosyasına sahip olma yeteneğidir. Bu .cpp dosyalarından birinde yalnızca BOOST_TEST_MODULE tanımlaması kadar basittir. Tüm test programlarımızda, bunu tanımlayan ve ünite test başlığını içeren bir "driver.cpp" dosyası var. Tüm .cpp dosyalarının geri kalanı (modül veya konsept ile kapsam dahil) sadece ünite test başlığını içerir, bu değişkeni tanımlamazlar.

Her ikisini de birlikte derlemek ve ayrı ayrı derlemek isterseniz, BOOST_TEST_MODULE tanımlamak için kendi -D değişkeninizi kullanabilirsiniz.

Tek bir testte bir grup test programını yürütmek ve bir rapor almak için bir yol arıyorsanız, test yapmak için automake yöntemine veya daha iyisi CMake metoduna (CTest) bakabilirsiniz. Israr ederseniz, CTest'i kendi makefileğinizden de kullanabilirsiniz.


8
2018-05-25 15:50



Bir test olarak, otomatik test takımları ve otomatik test senaryoları ile 2 dosya oluşturdum ve tanımladım BOOST_TEST_MODULE dosyalardan sadece birinde. Bağlama sırasında bir bazilyon "çoklu tanım" hatalar hakkında var. Her şey tek bir dosyada olduğunda iyi çalışıyor. - Robert S. Barnes
BOOST_AUTO_TEST_SUITE () tanımları olmadan deneyin. Onu kullanmıyorum. Bu makroyu kullanırsanız gerekli olan biraz farklı adımlar olabilir. Bunları kaldırmaya çalışmak, eğer durum buysa, inşa hatasınınizi çözecektir ve eğer gerekirse onlara daha fazla deney yapılması gerekecektir. Ayrıca, her iki testi de test etmeyin. Farklı dosyalardaki iki test aynı ada sahip olduğunda, bununla ilgili sıkıntı yaşadım. Aslında, önce bunu düzeltmeyi deneyin. - Crazy Eddie
Evet, düzenleme kodunuzu andıran kod içeren yorumu içeren (ve iki Test1 tanımına sahip olan) yorumda yer alan bağlantıyı inceledikten sonra, bir testin bu çoklu tanımının sorun olduğunu düşünüyorum. Bağlantılı eğitici bu özelliği paylaşmıyor ve farklı süitlerde bile farklı isimler kullanıyor. - Crazy Eddie
+1 Teşekkürler, sonunda ilgilendiyseniz çözümün tamamını çözdüm. - Robert S. Barnes
Evet, ilgilenirim. Çalıştığım bir şey var ama her zaman yeni yöntemlere açığım. - Crazy Eddie


Sadece Boost ile başladığımda. Kaynak kodu ile aşağıdaki makaleyi test edin: Test kurulumunu ve kullanımını artırın


3
2018-04-12 06:27