Jason House wrote:
As I currently understand boost.test, it provides its own main function. If I want to make a separate executable to run the tests, that seems straight forward. But how would I embed the testing inside a normal program with a simple command-line switch for running them?
It seems that no matter what I do, I keep getting a linking error with my latest attempt to get this to work: /usr/local/lib/libboost_unit_test_framework.so: undefined reference to `init_unit_test_suite(int, char**)' I am using boost 1.33.1. Below is what I consider to be the relevant part of my code that's giving me trouble. Most of it is copy/paste right out of online examples with only minor customization. What's really strange is that I get another unrelated link error. If I comment out my definition of init_unit_test_suite, my link errors reduce (and init_unit_test_suite is the only undefined symbol). If I comment out the unit test code completely, the program compiles and links without problem. I'm really baffled what could be going wrong. int main(int argc, char **argv){ ... boost::program_options::variables_map vm; ... if (vm.count("unit_test")){ // code lifted from boost/test/impl/unit_test_main.ipp::main using namespace boost::unit_test; try{ int argc_alt = 1; // customized char* argv_alt[] = {"housebot.exe"}; // customized framework::init( argc_alt, argv_alt ); // customized framework::run(); results_reporter::make_report(); return runtime_config::no_result_code() ? boost::exit_success : results_collector.results( framework::master_test_suite().p_id ).result_code(); } catch( std::logic_error const& ex ) { std::cerr << "Boost.Test internal framework error: " << ex.what() << std::endl; return boost::exit_exception_failure; } catch( ... ) { std::cerr << "Boost.Test internal framework error: unknown reason" << std::endl; return boost::exit_exception_failure; } } ... } boost::unit_test::test_suite::test_suite* get_connection_test_suite(); boost::unit_test::test_suite::test_suite* init_unit_test_suite( int, char* [] ) { boost::unit_test::test_suite::test_suite* test = get_connection_test_suite(); return test; }