Re: Тестирование реализаций интерфейса через boost unit_test
От: okman Беларусь https://searchinform.ru/
Дата: 30.10.11 07:10
Оценка:
Здравствуйте, mdbset, Вы писали:

M>Как с использованием boost unit_test с помощью одного набора тестов протестировать несколько реализаций некоторого интерфейса?


Ну например, создать global fixture, содержащую код инициализации интерфейса конкретным классом
реализации, и использовать созданный объект полиморфно в тест-кейсах. А тип объекта задавать
всякими конфигурационными методами, такими как командная строка.
То есть:
// Абстрактный класс геометрической фигуры.
class figure
{
public:
    virtual ~figure() {}

public:
    virtual void draw() = 0;
    virtual void shade_effect() = 0;
    virtual void rotate() = 0;
};

// Конкретные реализации
class circle : public figure {...};
class triangle : public figure {...};
class rectangle : public figure {...};

// ...

// Определение global fixture (см. описание в Boost Unit Test Framework).
struct my_fixture
{
    // setup
    my_fixture()
    {
        // В зависимости от опций командной строки
        // выбирается конкретная реализация figure.

        switch (command_line_option)
        {
            case opt::circle:
                pObject = new circle();
                break;

            case opt::triangle:
                pObject = new triangle();
                break;

            case opt::rectangle:
                pObject = new rectangle();
                break;

            default:
                pObject = NULL;
                break;
        }
    }

    // teardown
    ~my_fixture()
    {
        delete pObject;
    }

figure *pObject;
};

// ...

// Установка global fixture.

BOOST_GLOBAL_FIXTURE(my_fixture);

// Набор полиморфных тест-кейсов для figure.

BOOST_AUTO_TEST_CASE(draw_test)
{
    pObject->draw();
}

BOOST_AUTO_TEST_CASE(shade_effect_test)
{
    pObject->shade_effect();
}

BOOST_AUTO_TEST_CASE(rotate_test)
{
    pObject->rotate();
}

Еще можно использовать BOOST_TEST_CASE_TEMPLATE, тогда конкретные типы figure
будут задаваться списком (Boost.MPL) в параметрах шаблона.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.