2013-01-07 47 views
7

Tôi đã có một trường hợp thử nghiệm tăng cường. Hầu hết các dòng của trường hợp thử nghiệm này được thực hiện bất kể tham số. Nhưng có những phần được thực hiện dựa trên tham số được cung cấp. Tôi muốn tránh viết hai trường hợp kiểm tra riêng biệt gần như giống hệt nhau ngoại trừ một số phần nhỏ. Vì vậy, tôi cần sử dụng phương pháp nào đó như cách tiếp cận sau để tạo các trường hợp thử nghiệm được tham số hóa:Kiểm tra Tăng cường: Cách viết các trường hợp kiểm tra được tham số

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(...); 
} 

Có cách nào khác để đạt được mục tiêu của mình một cách thuận tiện hơn không? Tôi có thể tìm thấy macro BOOST_PARAM_CLASS_TEST_CASE nhưng tôi không chắc liệu macro đó có liên quan trong trường hợp này hay không.

+1

[Câu trả lời này] (http://stackoverflow.com/a/8110228/1252091) có thể hữu ích cho bạn (tôi chưa kiểm tra mã). –

+0

có thể trùng lặp của [Có thể sử dụng BOOST \ _PARAM \ _TEST \ _CASE với đăng ký tự động trên boost :: test?] (Http://stackoverflow.com/questions/8084038/is-it-possible-to-use- boost-param-test-case-with-automatic-registration-on-boost) –

Trả lời

1

Không hỗ trợ Boost AFAIK, vì vậy tôi làm điều này:

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) 
} 

Bạn có thể làm điều đó với mẫu nếu bạn thích chúng:

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>(); 
} 
Các vấn đề liên quan