przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
boosttest
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Opis biblioteki ===== ==== Minimal testing facility ==== <code cpp> #include <boost/test/minimal.hpp> #include <iostream> int square_err( int arg ) { return arg*arg-1; //blad gruby:) } int square( int arg ) { return arg*arg; } int cube( int arg ) { return arg*arg*arg; } int cube_err( int arg ) { return square_err( arg )*arg; } int test_main( int /*argc*/, char* /*argv*/[] ) //uwaga - zmieniona nazwa funkcji main { int foo(3); BOOST_REQUIRE( foo == 3 ); BOOST_CHECK( square( foo ) == 9 ); BOOST_CHECK( square_err( foo ) == 9 ); BOOST_CHECK( cube( foo ) == 27 ); BOOST_CHECK( cube_err( foo ) == 27 ); if( foo != 4 ) BOOST_ERROR( "foo != 4 !!!!!" ); //ponizsze 3 sprawdzenia przy bledzie spowoduja przerwanie dalszego testowania if(cube( foo ) != 4 ) throw "cube(3) != 4"; //recznie wykryty blad, zglaszany poprzez wyjatek //ktory nie ma okazji byc zlapany if(cube( foo ) != 8 ) BOOST_FAIL("cube(3) != 8");//rowniez zglasza wyjatek BOOST_REQUIRE( foo == 4 ); //blad w BOOST_REQUIRE powoduje przerwanie testow std::cout << "Ten kod nigdy nie zostanie osiagniety\n"; return 0; } </code> ==== Program execution monitor ==== <code cpp> #include <boost/test/prg_exec_monitor.hpp> int square_err( int arg ) { return arg*arg-1; //blad gruby:) } int square( int arg ) { return arg*arg; } int cube( int arg ) { return arg*arg*arg; } int cube_err( int arg ) { return square_err( arg )*arg; } int cpp_main( int, char* [] ) //zmieniona nazwa !!!!!! { int foo(3); if( square( foo ) != 9 ) throw "square() error"; if( square_err( foo ) != 9) throw "square_err() error"; //niezlapany wyjatek, spowoduje wypisanie na konsole //komunikatu: exception: C string: square_err() error //aby uzyskac komunikat o bledzie nalezy wyrzucic jeden z nastepujacych typow: //ciag znakow w stylu C (NULL-terminated) //instancje std::string //std::exception lub dowolna klase pochodna return 1; } </code> ==== Execution monitor ==== <code cpp> #include <boost/test/prg_exec_monitor.hpp> #include <boost/test/execution_monitor.hpp> #include <boost/test/utils/basic_cstring/io.hpp> #include <iostream> struct NotImplementedYetException {}; struct DivisionByZeroException {}; namespace { class TestClass { int arg; public: TestClass( int a ): arg(a){} int operator() () { if( arg > 10 ) throw NotImplementedYetException(); if( arg == 0 ) throw DivisionByZeroException(); return 10/arg; } }; void translate_NotImplementedYetException( NotImplementedYetException const& ex ) { std::cout<< "tej funkcji jeszcze nie zaimplementowano\n"; } void translate_DivisionByZeroException( DivisionByZeroException const& ex ) { std::cout<< "wymuszenie dzielenia przez zero\n"; } } //zakonczenie lokalnej przestrzeni nazw int cpp_main( int /*argc*/, char* /*argv*/[]) { ::boost::execution_monitor monitor; //rejestrowanie funkcji tlumaczacych wyjatki //pozwalaja one na bezpiecznie przechwytywanie wyjatkow przez mechanizmy biblioteki w przypadku //gdy uzytkownik nie dostarczy kodu wylapujacego te wyjatki //zapobiega to normalnemu w takich wypadkach wyjsciu z programu oraz umozliwia //przejrzenie listy zgloszonych w ten sposob wyjatkow po zakonczeniu testow monitor.register_exception_translator<NotImplementedYetException>( &translate_NotImplementedYetException ); monitor.register_exception_translator<DivisionByZeroException>( &translate_DivisionByZeroException ); try { monitor.execute( ::boost::unit_test::callback0<int>( TestClass( 20 ) ) ); /* execution_monitor::execute( unit_test::callback0<int> const& F, bool catch_system_errors, int timeout ) F - funkcja przyjmujaca zero argumentow, rzucany jest wyjatek boost::execution_exception przy niezlapanym wyjatku, wystapieniu bledu systemowego (jesli catch_system_errors jest ustawiony na true) lub po okreslonym timeoucie */ } catch ( boost::execution_exception const& ex ) { std::cout << "Zlapano wyjatek: " << ex.what() << std::endl; } return 0; } </code> ====Unit test framework ====
boosttest.1208304055.txt.gz
· ostatnio zmienione: 2008/04/16 02:00 przez
twroniak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry