Destek başlıklarını yeniden okuyun ve BOOST_CHECK_NO_THROW_IMPL yeniden tanımlanmış kendi üstbilgi dosyasında yeniden tanımlama davranışını yeniden tanımlamak için projede kullanıyorum. Şimdi şuna benzer:
#ifndef _CATCH_BOOST_NO_THROW_H_
#define _CATCH_BOOST_NO_THROW_H_
#include <boost/test/unit_test.hpp>
#include <sstream>
#include <string>
#define BOOST_CHECK_NO_THROW_IMPL(S, TL) \
try { \
S; \
BOOST_CHECK_IMPL(true, "no exceptions thrown by " BOOST_STRINGIZE(S), TL, CHECK_MSG); } \
catch(const std::exception & e) { \
std::stringstream ss; \
ss << std::endl \
<< "-----------------------------------------------" << std::endl \
<< "test case: " << boost::unit_test::framework::current_test_case().p_name << std::endl \
<< std::endl << "exception message: " << e.what() << std::endl; \
BOOST_TEST_MESSAGE(ss.str()); \
BOOST_CHECK_IMPL(false, "exception thrown by " BOOST_STRINGIZE(S), TL, CHECK_MSG); \
} \
catch(...) { \
std::stringstream ss; \
ss << std::endl \
<< "-----------------------------------------------" << std::endl \
<< "test case: " << boost::unit_test::framework::current_test_case().p_name << std::endl \
<< std::endl << "exception message : <unknown exception>" << std::endl; \
BOOST_TEST_MESSAGE(ss.str()); \
BOOST_CHECK_IMPL(false, "exception thrown by " BOOST_STRINGIZE(S), TL, CHECK_MSG); \
} \
/**/
#define BOOST_WARN_NO_THROW(S) BOOST_CHECK_NO_THROW_IMPL(S, WARN)
#define BOOST_CHECK_NO_THROW(S) BOOST_CHECK_NO_THROW_IMPL(S, CHECK)
#define BOOST_REQUIRE_NO_THROW(S) BOOST_CHECK_NO_THROW_IMPL(S, REQUIRE)
#endif // _CATCH_BOOST_NO_THROW_H_
dezavantajları şunlardır: olarak işaretlendiğinde önce istisna mesajı yazdırılır
ve
BOOST _ * _ NO_THROW değişiklik olmadığı gibi uzun olarak çalışır test çıktısında hata. Bu ilk etapta biraz pisi görünüyor, bu yüzden çıkışı geliştirmek için çıkışa "---" yazarak çıkışı gruplandırıyorum. Ancak BOOST_CHECK_IMPL koduna hiçbir zaman ulaşılamayacak. Yukarıdaki çözüm benim için oldukça iyi çalışıyor.) = Aynı whish var ise, hiç çekinmeden kullanabilirsiniz
(ctest çıkış için CDash kullanma limitini testi çıkış limitini artırmak için unutmak ya da basit devre dışı değildir: hiç http://web.archiveorange.com/archive/v/5y7PkVuHtkmVcf7jiWol)
Yazma ? Yükseltme Testleri, kodun hata ayıklaması için kodun kırılmadığını kontrol etmek içindir. Bozuk mu? Bu boole değeri: doğru veya yanlış. Özel durum oluşursa (test koşucunun komut satırı argümanlarının göre konsolun veya xml dosyası,) standart çıktı –
(1) Yazma (2) , evet bozuldu . Ancak istisna mesajını görebiliyorsa (what()) çıktısı, hatanın nereden geldiğini bulmak için daha hızlıdır. – 550
Evet ama neden? Test kodun bozuk olduğunu gösterdi: atmaması gereken istisnalar attı. Bir sonraki adım, kod veya testi düzeltmek ve çöp ile doldurulmuş konsolun ayrıntılı XML dosyalarını oluşturmamaktır. –