2015-05-28 4 views
2

У меня есть BOOST_AUTO_TEST_CASE, которому нужна вспомогательная функция. Я мог бы просто сделать это обычной функцией и вызвать ее изнутри; но я предпочел бы как-то сохранить его локальным и частным в объеме BOOST_AUTO_CASE. Я также хотел бы объявить вары, которые входят в объем как тестового примера, так и вспомогательных функций (например, const int serverCount = 10;).Тестирование блока усиления: добавление вспомогательного метода или частной функции

Если тестовый пример был классом (а не макросом), я бы просто использовал частную функцию-член. Как это сделать (или эквивалент) для тестового примера блока Boost?

ответ

2

К счастью, есть решение для этого права в испытательной раме Boost: Светильники. Существуют различные типы светильников, но в вашем случае per test case fixture, похоже, подходит.

#define BOOST_TEST_MODULE example 
#include <boost/test/included/unit_test.hpp> 

struct TestContext { 
    TestContext() : testVar(0) { BOOST_TEST_MESSAGE("setup fixture"); } 
    ~TestContext()    { BOOST_TEST_MESSAGE("teardown fixture"); } 

    int testVar; 

    void helperMethod(int x, double y) 
    { 
     testVar = x * (int)y; 
    } 
}; 

BOOST_FIXTURE_TEST_CASE(test_case1, TestContext) 
{ 
    BOOST_CHECK(testVar == 1); 
    ++testVar; 
} 

BOOST_FIXTURE_TEST_CASE(test_case2, TestContext) 
{ 
    helperMethod(2, 3.1); 
    // ... 
} 

testVar доступен в тестовом случае, а также в TestContext класса/структуры. Конструктор и деструктор TestContext вызываются непосредственно перед и после каждого тестового примера. Они не нужны, но могут пригодиться, если вам нужно управлять памятью, например. В частности, каждый тестовый пример запускается со своим собственным новым экземпляром TestContext.

+0

Спасибо. Являются ли 'BOOST_FIXTURE_TEST_CASE' добавлены как методы для' TestContext'? Есть ли способ записать их в рамках '{}' scope 'TestContext'? Для стиля и организации я счастливее вижу все в одном наборе '{}'. (Также помогает с IDE и сворачиванием кода.) – SRobertJames

+0

Большинство моих классов имеют одно тестовое крепление 'TestContext', поэтому я никогда не нуждался в дополнительной организационной области. Если вы посмотрите на 'unit_test_suite.hpp', вы можете найти определение' BOOST_FIXTURE_TEST_CASE'. Это может дать вам представление, возможно ли это или нет. Еще лучше: попробуй, что может пойти не так? – TobiMcNamobi

Смежные вопросы