буст-юнит-тест - список доступных тестов - PullRequest
4 голосов
/ 18 декабря 2011

Я написал несколько сценариев для автоматизации выполнения наших модульных тестов, написанных с использованием фреймворка для модульного тестирования. Я хотел бы добавить функциональность, чтобы позволить выбор и последующее выполнение подмножества всех тестов. Я знаю, что могу запустить подмножество тестов, используя аргумент run_test, но не могу найти способ перечислить все тесты, которые находятся в скомпилированном двоичном файле, то есть все значения аргументов, которые я могу передать в run_test. Есть ли способ извлечь все доступные тесты, или мне придется написать собственный тестовый прогон? Если да, то с чего мне начать?

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

Может быть немного не хватает документации для внутренних компонентов boost :: test, в которой говорится, что все доступно.

Посмотрите на заголовочные файлы boost :: test, особенно на классы test_suite и test_unit.Существует функция traverse_test_tree, которую можно использовать для обхода зарегистрированных тестов.

Ниже приведен код samle, который я написал для вывода результатов теста в определенном формате, он использует traverse_test_tree для вывода результата каждого теста.Надеюсь, это даст вам преимущество ...

/**
 * Boost test output formatter to output test results in a format that
 * mimics cpp unit.
 */
class CppUnitOpFormatter : public boost::unit_test::output::plain_report_formatter
{
public:
    /**
     * Overidden to provide output that is compatible with cpp unit.
     *
     * \param tu the top level test unit.
     * \param ostr the output stream
     */
    virtual void do_confirmation_report( boost::unit_test::test_unit const& tu, 
                                         std::ostream& ostr );
};


class CppUnitSuiteVisitor : public test_tree_visitor
{
public:
    explicit CppUnitSuiteVisitor( const string& name ) : name_( name )
    {}

    virtual void visit( const test_case& tu )
    {
        const test_results& tr = results_collector.results( tu.p_id );
        cout << name_ << "::" << tu.p_name << " : " << ( tr.passed() ? "OK\n" : "FAIL\n" );
    }
private:
    string name_;
};

// ---------------------------------------------------------------------------|
void CppUnitOpFormatter::do_confirmation_report( 
        test_unit const& tu, std::ostream& ostr )
{
    using boost::unit_test::output::plain_report_formatter;

    CppUnitSuiteVisitor visitor( tu.p_name );
    traverse_test_tree( tu, visitor );

    const test_results& tr = results_collector.results( tu.p_id );
    if( tr.passed() ) 
    {
        ostr << "Test Passed\n";
    }
    else
    {
        plain_report_formatter::do_confirmation_report( tu, ostr );
    }
}
2 голосов
/ 25 мая 2012

Магистральная версия Boost.Test имеет аргумент командной строки, чтобы получить то, что вам нужно.

...