我有一個測試,其目的是讀取配置類中的CPP單元測試:我們可以調用這個類CppUnit的使用命令行參數
Config
的配置類有做
Config c;
c.read("/tmp/random-tmp-directory/test.conf");
的能力
random-temp-directory
由bash腳本創建,應傳遞到測試二進制文件中。
#!/bin/bash
TEMPDIR=$(mktemp)
cp files/config/test.conf $TEMPDIR/.
./testConfig $(mktemp)/test.conf
上面創建一個臨時目錄,拷貝我們的臨時文件和經過的路徑測試,因此它可以加載正確的文件。
有沒有辦法告訴CPPUNIT將命令行參數或任何參數發送到測試註冊表?
這裏是我的testConfig.cpp
#include <all the required.h>
CPPUNIT_TEST_SUITE_REGISTRATION(testConfig);
int main(int argc, char ** argv)
{
CPPUNIT_NS::TestResult testresult;
CPPUNIT_NS::TestRunner runner;
CPPUNIT_NS::TestFactoryRegistry ®istry = CPPUNIT_NS::TestFactoryRegistry::getRegistry();
// register listener for collecting the test-results
CPPUNIT_NS::TestResultCollector collectedresults;
testresult.addListener(&collectedresults);
runner.addTest(registry.makeTest());
runner.run(testresult);
// Print test in a compiler compatible format.
CppUnit::CompilerOutputter outputter(&collectedresults, std::cerr);
outputter.write();
return collectedresults.wasSuccessful() ? 0 : 1;
}
您如何知道要讀取哪個文件?讀取的文件作爲參數傳入。所以相同的代碼可以在多個文件上運行。我通過使用靜態變量來繞過它,這不是很漂亮,但它是它是什麼 –
使用依賴注入。將文件名傳遞給配置文件命名方法的參數。輸出應該是文件的完全限定名稱。將名稱傳入文件閱讀器。文件讀取器的輸出應該是一堆數據(可能是一個流)。將流傳遞到解析器,並獲取配置信息。現在,您可以通過在測試代碼中創建strstream來單元測試解析器,並且可以測試有關配置文件值的所有內容,而無需實際配置文件。你可以單元測試名稱創建者,而不必打開一個實際的配置文件。 –
林不知道我跟着,您的答案可能是一個僞代碼擴展? –