如何在更新到CppUnit 1.12时替换CppUnit 1.9中过时的getRegistryList()

How to replace obsolete getRegistryList() from CppUnit 1.9 when updating to CppUnit 1.12?

本文关键字:CppUnit 过时 getRegistryList 12时 更新 替换      更新时间:2023-10-16

我移植的代码有很多基于CppUnit 1.9.11左右的测试套件。我的测试运行程序可以使用以下(不推荐使用?)习惯用法打印所有命名的测试套件:

cout << "n Usage: UnitTest testSuiteName ...nn";
cout << " Tests available: n";
CppUnit::TestFactoryRegistry registry("All Tests");
CppUnit::Test* test =  registry.getRegistry().makeTest();
CppUnit::Registries registryList = registry.getRegistryList();
CppUnit::Registries::iterator it;
for (it = registryList.begin(); it != registryList.end(); ++it)
{
        cout << " - " << it->first << endl;
}

显然,在CppUnit 1.12中不存在getRegistryList()。是否有一个等效的习惯用法来获取所有注册的、命名的测试套件?

回答我自己的问题:

cout << "n Usage: UnitTest TestNamesnn";
cout << " Tests available: n";
CppUnit::TestFactoryRegistry &registry =
        CppUnit::TestFactoryRegistry::getRegistry(); // "All Tests"
CppUnit::Test *test = registry.makeTest();
CppUnit::TestSuite *s = dynamic_cast<CppUnit::TestSuite*>(test);
if (!s) {
        cerr << "can't get TestSuite" << endl;
} else {
        typedef CppUnitVector<CppUnit::Test *> container_type;
        const container_type &tests( s->getTests() );
        container_type::const_iterator ii;
        for (ii=tests.begin(); ii != tests.end(); ++ii) {
                const CppUnit::Test *t = (*ii);
                cout << " - " << t->getName() << endl;
        }
}