Привет всем!
Необходимо написать тесты для либы с помощью cppUnit.
Столкнулся с такой штукой: cppUnit выводит либо OK — при прохождении всех тестов
либо Failed и дискрипшен (че собственно зафейлило). А требуют от меня показать покрытую функциональность тест кейсов... Кто-нибудь занает как юзать cppUnit чтобы он выводил результаты типа:
TestAddition .......OK
TestConstructor.....OK
CppUnit::TextUi::TestRunner runner;
CppUnit::TestFactoryRegistry ®istry =
CppUnit::TestFactoryRegistry::getRegistry();
runner.addTest( registry.makeTest() );
runner.setOutputter( CppUnit::CompilerOutputter::defaultOutputter(
&runner.result(),
std::cerr ) );
CppUnit::TextTestProgressListener progress;
runner.eventManager().addListener( &progress );
runner.run("",false,true,true);
progress.done();
Заранее спасибо за помощь.
По мотивам CppUnit::TextTestProgressListener написал я вот такой класс:
class CPPUNIT_API TextTestProgressListenerEx : public CppUnit::TextTestProgressListener
{
public:
TextTestProgressListenerEx() {}
virtual ~TextTestProgressListenerEx() {}
void startTest( CppUnit::Test *test );
void addFailure ( const CppUnit::TestFailure & failure );
void endTest( CppUnit::Test *test );
private:
TextTestProgressListenerEx( const TextTestProgressListenerEx © );
void operator =( const TextTestProgressListenerEx © );
private:
bool hadError;
};
void
TextTestProgressListenerEx::startTest( CppUnit::Test *test )
{
hadError = false;
std::cerr << test->getName();
std::cerr.flush();
}
void
TextTestProgressListenerEx::addFailure( const CppUnit::TestFailure &failure )
{
hadError = true;
std::cerr << ( failure.isError() ? "\tError!" : "\tFailure!" );
std::cerr.flush();
}
void
TextTestProgressListenerEx::endTest( CppUnit::Test *test )
{
if (!hadError)
std::cerr << "\tOK";
std::cerr << std::endl;
std::cerr.flush();
}
Он выводит результаты по каждому тест-кейсу. Если хочется, например, их группировать по сюитам, надо анализировать имя приходящего теста. Дело в том, что для сюит слушатели прогресса не вызываются

Но имена тестов в CppUnit писаны в совершенно стандартном формате, поэтому можно, ориентируясь по точкам, выводить все это более красиво. Например, не писать имя каждого тест-кейса, а только для сюит. Для тест-кейсов же выводить, скажем, точку...
... << RSDN@Home 1.1 beta 2 >>
И вдогонку.
CPPUNIT_API там лишнее. Можно и без него, если конечно, не собираемся встраивать этот класс в библиотеку
А регистрировать его — как и раньше:
...
TextTestProgressListenerEx progress;
runner.eventManager().addListener( &progress );
runner.run("",true,true,false);
// ^^^^^^^^^^^^^^^
// Я предпочитаю такой вызов, чтобы не запускался стандартный слушатель,
// и ждали нажатия клавиши.
...
... << RSDN@Home 1.1 beta 2 >>
Здравствуйте, conraddk, Вы писали:
Спасибо большое за помощью.
Буду бороться дальше