2013-02-05 20 views
26

Kısa bir süre önce test edilmiş ve büyük (> 1 milyon satırlık) bir programa girmeye çalıştım. Şu anda birim testi yok. Ayrıca, program her bir dosya birbirine bağlı olarak bağlanır - hiçbir bileşen kitaplığı yoktur. Ayrıca, nesneler yüksek birbirine bağımlıdır ve herhangi bir nesne dosyasına en az yarısı bağlanmadan link vermek zor mu (imkansız?).Birden fazla BOOST birim testini tek bir test binary'sine bağlayabilir miyim?

Evet, biliyorum hayatım berbat.

Bazı refactoring yapmak istiyorum (belli ki), ama bazı şeyleri etrafta dolaşmaya başlamadan önce yerinde olmak istiyorum. Benim şu anki düşüncem, oluşturduğum tüm testleri çalıştıran tek bir "test programını" derlemek. Bu, sahip olduğum bağlantı sorunlarını büyük ölçüde basitleştirecek ve gerçek sorunlara odaklanmama izin verecek. Yani iki soru var:

  • o bir test yürütülebilir içine birden BOOST birim test dosyalarını bağlamak mümkün mü?
  • Daha iyi bir çözüm var mı?
+0

Bunu yapmanın bir yolu olabilir gibi görünüyor. Güncellemeler devam edecek. – dbn

cevap

31

Sanırım bu, boost testinin nasıl kullanılacağıdır. Tam anlamıyla 2 satırdan oluşan bir kısa main.cpp dosyasını tutmak olacaktır:

#define BOOST_TEST_MODULE "C++ Unit Tests for MyTangledLibrary" 
#include <boost/test/included/unit_test.hpp> 

Sonra bir yürütülebilir araya derlenmiş deney modülü * .cpp dosyaları eklemeye devam ediyorum

#include <boost/test/unit_test.hpp> 
<< your include files >> 

BOOST_AUTO_TEST_SUITE(FancyShmancyLogic) 

BOOST_AUTO_TEST_CASE(TestingIf2x3equals6) 
{ 
    ... 
} 

BOOST_AUTO_TEST_CASE(TestingIf2x2equals4) 
{ 
    ... 
} 

BOOST_AUTO_TEST_SUITE_END() 

Evet, main.cpp ve tüm modüllerinizi büyük bir yürütülebilir dosyaya derleyebileceksiniz.

+1

Bunu denediğimde, sınama derler ve bağlar, ancak çalıştırdığımda: Test kurulumu hatası: test ağacı boş –

+2

Ayrıca, tüm modül * .cpp dosyalarınızı main.cpp içine eklemeniz gerekir. Aksi takdirde test koşusu testlerinizi bilmiyor. – Ace7k3

+1

@ Ace7k3, '' include' a '.cpp' dosyası için kötü bir uygulama olduğunu düşündüm. Bu bir istisna mı? – tjwrona1992

İlgili konular