2015-09-04 4 views
0

Я использую cppunit для тестирования моего кода на C++. Я написал мой тестовый прибор, как этотМожем ли мы передать параметры для функций тестовых случаев в C++ с помощью CppUnit?

class MainTestFixture : public TestFixture 
{ 
    CPPUNIT_TEST_SUITE(MainTestFixture);  
    CPPUNIT_TEST(Addition); 
    CPPUNIT_TEST(Multiply); 
    CPPUNIT_TEST_SUITE_END(); 

public: 
    void setUp(void); 
    void tearDown(void); 
protected: 
    // Test Functions 
    void Addition(void); 
    void Multiply(void); 
}; 

Теперь, если я реализую тестовые случаи, как

void MainTestFixture::Addition() 
{ 
    // CPPUNIT_ASSERT(condition); 
} 
void MainTestFixture::Multiply() 
{ 
    // CPPUNIT_ASSERT(condition); 
} 

В приведенном выше коде, это возможно, что я передать параметры функции сложения и Multiply?

Где, как я сделал набор для запуска этой арматуре, как показано ниже

#include "MainTestFixture.h" 

CPPUNIT_TEST_SUITE_REGISTRATION(MainTestFixture); 

using namespace CPPUNIT_NS; 
int main() 
{ 
    // informs test-listener about testresults 
    CPPUNIT_NS::TestResult testresult; 

    // register listener for collecting the test-results 
    CPPUNIT_NS::TestResultCollector collectedresults; 
    testresult.addListener (&collectedresults); 

    // register listener for per-test progress output 
    CPPUNIT_NS::BriefTestProgressListener progress; 
    testresult.addListener (&progress); 

    // insert test-suite at test-runner by registry 
    CPPUNIT_NS::TestRunner testrunner; 
    testrunner.addTest (CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest()); 
    testrunner.run(testresult); 

    // output results in compiler-format 
    CPPUNIT_NS::CompilerOutputter compileroutputter(&collectedresults, std::cerr); 
    compileroutputter.write(); 

    // Output XML for Jenkins CPPunit plugin 
    ofstream xmlFileOut("cppMainUnitTest.xml"); 
    XmlOutputter xmlOut(&collectedresults, xmlFileOut); 
    xmlOut.write(); 

    // return 0 if tests were successful 
    return collectedresults.wasSuccessful() ? 0 : 1; 
} 
+0

Если вы хотите тестирования с параметрами Google C++ Testing Framework (https://code.google.com/p/googletest/wiki/AdvancedGuide#Type-Parameterized_Tests) предлагает такую ​​возможность, если вы готовы отдать его попробуйте. – rbaleksandar

+0

Но мой проект также работает на Linux, cppunit хорошо работает. Работает ли Google C++ в Linux? –

+0

gtest является многоплатформенным и отлично работает на Linux (я использовал его много раз). Его также не нужно устанавливать (на самом деле официальная рекомендация НЕ устанавливается), и вы можете просто использовать его, добавив файлы gtest в структуру вашего проекта. – rbaleksandar

ответ

0

Нет, вы не можете. Дополнение() - это обратный вызов, который будет зарегистрирован в двигателе CPPUNIT и вызван драйвером - поэтому он должен использовать интерфейс void (void). Вместо этого вы можете определить свои параметры как члены MainTestFixture.

class MainTestFixture : public TestFixture 
{ 
    CPPUNIT_TEST_SUITE(MainTestFixture);  
    CPPUNIT_TEST(Addition); 
    CPPUNIT_TEST(Multiply); 
    CPPUNIT_TEST_SUITE_END(); 

public: 
    void setUp(void); 
    void tearDown(void); 
protected: 
    // Test Functions 
    void init_fixture(); 
    void Addition(void); 
    void Multiply(void); 
protected: 
    //data members 
    param1_t m_param1; 
    param2_t m_param2; 

}; 

void MainTestFixture::init_fixture() 
{ 
    m_param1 = ...; 
    m_param2 = ...; 
} 
void MainTestFixture::Addition() 
{ 
    param1_t res= m_param1 + ...; 
    // CPPUNIT_ASSERT(condition); 
} 
+0

Можете ли вы показать пример того, что вы подразумеваете под «вы могли бы определить свой параметры как члены MainTestFixture "? –

+0

Я хочу задать еще одну вещь, что, можем ли мы зарегистрировать более одного прибора в наборе? как здесь, в моем коде CPPUNIT_TEST_SUITE_REGISTRATION (MainTestFixture); Итак, могу ли я добавить на другую строку, как это, и запустить пакет сразу? –