Повысьте тестовый набор и наборы приложений в заданном вручную дереве набора - PullRequest
2 голосов
/ 01 августа 2011

Использование Boost 1.46.1 в Windows x86, Android TI 2.2

Я определил свое собственное дерево наборов тестов, так как мне нужно, чтобы пользователь выбрал порядок тестов.хотя я знаю, что тесты должны быть независимыми, это требование.Дерево набора тестов было переопределено с использованием моей собственной реализации test_suite* init_unit_test_suite(int, char**).

. Для автоматических тестовых случаев и автоматизированных тестовых наборов существуют макросы Boost: BOOST_FIXTURE_TEST_CASE и BOOST_FIXTURE_TEST_SUITE( suite_name, F ).Эти макросы регистрируют функцию в framework::master_test_suite(), что в данном случае нежелательно.

Глобальное приспособление (BOOST_GLOBAL_FIXTURE(fixure_name)) остается неизменным при определении набора тестов вручную.

Я бы хотелиспользуйте приспособления в Boost Unit Testing Framework для определенных вручную наборов тестов и кейсов.Аккуратный способ.

Есть несколько обходных путей:

  • Приспособление Test Suite - может быть определено как первый и последний тест среди его детских наборов / кейсов.Однако это влияет на результаты теста и действует как отдельный тест, который на самом деле не является хорошим решением.
  • Приспособление для тестового набора - оборачивая экземпляр с областью действия вокруг функции тестового набора.

Есть ли другое, более чистое и приятное решение моей проблемы?У меня действительно нет ресурсов, чтобы копаться в библиотеке Boost.С другой стороны, я не хочу значительно снижать качество и удобочитаемость кода на моей стороне.

С уважением, LK

#include <boost/bind.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/test/unit_test.hpp>
using namespace boost::unit_test;

BOOST_GLOBAL_FIXTURE(GFixture);

test_suite* init_unit_test_suite( int, char** )
{
    test_suite* ts1 = BOOST_TEST_SUITE( "Suite1" );

    boost::shared_ptr<TestClass1> test1 ( new TestClass1 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass1::Run, test1)));
    boost::shared_ptr<TestClass2> test2 ( new TestClass2 );
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass2::Run, test2)));
    boost::shared_ptr<TestClass3> test3 ( new TestClass3);
    ts1->add( BOOST_TEST_CASE( boost::bind(&TestClass3::Run, test3)));

    framework::master_test_suite().add( ts1 );
    return 0;
}

Framework Unit Framework: руководство пользователяhttp://www.boost.org/doc/libs/1_46_1/libs/test/doc/html/utf/user-guide.html

1 Ответ

0 голосов
/ 03 августа 2011

рассмотрите следующий код:

#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/test/unit_test_suite.hpp>

BOOST_GLOBAL_FIXTURE( ... );

BOOST_AUTO_TEST_SUITE( Suite1 )

    BOOST_AUTO_TEST_CASE( Test1 )
    {
        TestClass1 testClass;

        testClass.Run();
    }


    BOOST_AUTO_TEST_CASE( Test2 )
    {
        TestClass2 testClass;

        testClass.Run();
    }

    BOOST_AUTO_TEST_CASE( Test3 )
    {
        TestClassT testClass;

        testClass.Run();
    }

BOOST_AUTO_TEST_SUITE_END()

Этого достаточно для проведения теста.

...