2013-01-07 12 views
7

Mam test testowy doładowania. Większość wierszy tego przypadku testowego jest wykonywana niezależnie od parametrów. Ale są części, które są wykonywane na podstawie podanego parametru. Chcę uniknąć pisania dwóch oddzielnych przypadków testowych, które są prawie identyczne, z wyjątkiem kilku drobnych części. Więc muszę używać coś jak następujące podejście do tworzenia parametrycznych testów:Test wzmocnienia: sposób zapisywania sparametryzowanych przypadków testowych

BOOST_FIXTURE_TEST_CASE(caseA, Fixture) 
{ 
    TestFunction("parameterA"); 
} 

BOOST_FIXTURE_TEST_CASE(caseB, Fixture) 
{ 
    TestFunction("parameterB"); 
} 

void TestFunction(string param) 
{ 
    // ... 
    // lots of common checks regardless of parameters 
    // ... 
    if(param == "parameterA") 
     BOOST_CHECK(...); 
    else if(param == "parameterB") 
     BOOST_CHECK(...); 
} 

Czy jest jakiś inny sposób, aby osiągnąć swój cel w bardziej wygodny sposób? Mogłem znaleźć makro, ale nie jestem pewien, czy jest to istotne w tym przypadku.

+1

[Ta odpowiedź] (http://stackoverflow.com/a/8110228/1252091) może ci się przydać (nie testowałem kodu). –

+0

możliwy duplikat [Czy możliwe jest użycie BOOST \ _PARAM \ _TEST \ _CASE z automatyczną rejestracją na boost :: test?] (Http://stackoverflow.com/questions/8084038/is-it-possible-to-use- boost-param-test-case-with-automatic-registration-on-boost) –

Odpowiedz

1

Brak wsparcia doładowania AFAIK, więc mogę to zrobić:

void test_function(parameters...) 
{ 
    <test code> 
} 

BOOST_AUTO_TEST_CASE(test01) { 
    test_function(parameters for case #1) 
} 

BOOST_AUTO_TEST_CASE(test02) { 
    test_function(parameters for case #2) 
} 

Można to zrobić za pomocą szablonów, jeśli chcesz je:

template<int I, bool B> 
void test_function() 
{ 
    for(int i=0; i<I; i++) 
     if (B) BOOST_REQUIRE(i<10); 
} 

BOOST_AUTO_TEST_CASE(test01) { 
    test_function<10, true>(); 
} 

BOOST_AUTO_TEST_CASE(test02) { 
    test_function<20, false>(); 
} 
Powiązane problemy