cppUnit results
От: EvgeniyN  
Дата: 28.11.03 15:29
Оценка:
Привет всем!
Необходимо написать тесты для либы с помощью cppUnit.
Столкнулся с такой штукой: cppUnit выводит либо OK — при прохождении всех тестов
либо Failed и дискрипшен (че собственно зафейлило). А требуют от меня показать покрытую функциональность тест кейсов... Кто-нибудь занает как юзать cppUnit чтобы он выводил результаты типа:

TestAddition .......OK
TestConstructor.....OK


     CppUnit::TextUi::TestRunner runner;
      CppUnit::TestFactoryRegistry &registry = 
         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();


Заранее спасибо за помощь.
Re: cppUnit results
От: conraddk Россия  
Дата: 03.12.03 15:28
Оценка:
По мотивам 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 &copy );
    void operator =( const TextTestProgressListenerEx &copy );
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 >>
Все на свете должно происходить медленно и неправильно...
Re[2]: cppUnit results
От: conraddk Россия  
Дата: 03.12.03 15:34
Оценка:
И вдогонку.
CPPUNIT_API там лишнее. Можно и без него, если конечно, не собираемся встраивать этот класс в библиотеку
А регистрировать его — как и раньше:
...
TextTestProgressListenerEx progress;
runner.eventManager().addListener( &progress );
runner.run("",true,true,false); 
//            ^^^^^^^^^^^^^^^
// Я предпочитаю такой вызов, чтобы не запускался стандартный слушатель, 
// и ждали нажатия клавиши.
...
... << RSDN@Home 1.1 beta 2 >>
Все на свете должно происходить медленно и неправильно...
Re[3]: cppUnit results
От: Аноним  
Дата: 07.12.03 14:54
Оценка:
Здравствуйте, conraddk, Вы писали:

Спасибо большое за помощью.
Буду бороться дальше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.