嗯,你已經發現自己的功能在那裏,根據鏈接,它是在那裏供最終用戶使用。 它沒有記錄在案,並且「應該很快加入」(按照鏈接)。
現在,這裏是一個諾特爾後我發現它使用特徵:從那裏 http://boost.2283326.n4.nabble.com/Unit-Test-Framework-strange-behaviour-of-test-unit-depends-on-td2653654.html
樣品(不幸的是,看起來像沒有BOOST_AUTO_TEST_CASE在那裏工作)。 另請注意,代碼不正確因爲Dependency()
永遠不會被調用,因此依賴測試不能運行。
#include <boost/test/included/unit_test.hpp>
using boost::unit_test::test_suite;
void Dependency()
{
BOOST_MESSAGE("Dependency!");
BOOST_CHECK(1);
}
void TC_TestCase()
{
BOOST_MESSAGE("A test case!");
BOOST_CHECK(1);
}
test_suite*
init_unit_test_suite(int argc, char* argv[])
{
test_suite* ts = BOOST_TEST_SUITE("Test_Test");
ts->add(BOOST_TEST_CASE(&TC_TestCase));
/*1*/ ts->depends_on(BOOST_TEST_CASE(&Dependency));
return ts;
}
更新
進行了一些試驗,在與自動測試/套和依賴關係的例子。 關於代碼的一些注意事項:
- 此處提升爲1.42,新版本可能略有差異。
- 如果您在cpp文件中將
test_suite1
放在test_suite2
之後,保持相關性相同,test_suite1將總是被跳過,因爲test_suite2
不會在它之前運行。
- 我發
test_case4
失敗,所以test_suite1
被跳過,但如果test_case4
成功,test_suite1
確實執行。
- 我敢肯定,你可以使依賴關係註冊更漂亮和更短。
代碼:
#include <boost/test/included/unit_test.hpp>
using namespace boost::unit_test;
BOOST_AUTO_TEST_SUITE(test_suite2)
BOOST_AUTO_TEST_CASE(test_case4)
{
BOOST_CHECK(false);
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(test_suite1)
BOOST_AUTO_TEST_CASE(test_case1)
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_CASE(test_case2)
{
BOOST_CHECK(true);
}
BOOST_AUTO_TEST_SUITE_END()
//____________________________________________________________________________//
test_suite*
init_unit_test_suite(int argc, char* argv[])
{
const auto testSuite1Id = framework::master_test_suite().get("test_suite1");
if(testSuite1Id != INV_TEST_UNIT_ID) {
auto test_suite1 = &framework::get<test_suite>(testSuite1Id);
const auto testSuite2Id = framework::master_test_suite().get("test_suite2");
if (testSuite2Id != INV_TEST_UNIT_ID) {
auto testSuite2 = &framework::get<test_suite>(testSuite2Id);
const auto testCase4Id = testSuite2->get("test_case4");
if (testCase4Id != INV_TEST_UNIT_ID) {
// test_suite1 depends on test_suite2/test_case4
test_suite1->depends_on(&framework::get<test_case>(testCase4Id));
}
}
}
return 0;
}
輸出:
Running 3 test cases...
Entering test suite "Master Test Suite"
Entering test suite "test_suite2"
Entering test case "test_case4"
<blahblahblah>/consoleapplication5/consoleapplication5.cpp(10): error in "test_case4": check false failed
Leaving test case "test_case4"; testing time: 14ms
Leaving test suite "test_suite2"
Test suite "test_suite1"is skipped
Leaving test suite "Master Test Suite"
*** 1 failure detected in test suite "Master Test Suite"
感謝您提供具體的語法。我曾認爲,自從3年前提出這個問題以來,文件現在已經得到修復,但事實似乎並非如此。 你在回答中提到了「BOOST_AUTO_TEST_CASE」,所以我想問一下:有什麼方法可以通過Boost中的自動註冊提交的測試用例調用「depends_on」功能?如果沒有,我找到一個名爲NCBI的庫,它支持可能支持測試依賴性的宏語法。 – churay
更新答案,註冊自動測試案例和套件。 – biocomp
請注意,儘管如此,測試不會以依賴性順序執行。如果你首先聲明瞭test_suite1,它將被跳過,因爲test_case4「失敗」,因爲它還沒有運行。 – namezero