当你知道答案时,结果很简单,所以这里是为任何未来的读者准备的。
正如我在问题中提到的,我编写了一个IHasCategories
带有 method的抽象基类get_Categories()
,并且我的测试装置覆盖了该方法以返回以逗号分隔的类别列表。
难题中缺少的部分是如何CppUnit::TestFixture
从 CppUnit 中获取实例。事实证明,CppUnit 为您提供了CppUnit::Test
对象层次结构,您可以将dynamic_cast
这些对象简单地添加到您想要的类中。
以下代码有点特定于我的需求,但可能会有所帮助。此方法提供层次结构中的对象列表,这些对象以层次结构表示 TestFixture。我使用类似的命令执行此列表中的对象test->run(&controller);
。当我想检查类别的实际 TestFixture 对象时,我想将这些对象的子对象 dynamic_cast 为IHasCategories
.
/**
* Get TestSuite objects from the CppUnit hierarchy, that have, as their children,
* TestFixture objects.
*/
void GetTestSuitesWithFixtures(const CppUnit::Test * test, std::vector<CppUnit::Test*> & suites)
{
for (int childIndex = 0; childIndex < test->getChildTestCount(); ++childIndex)
{
CppUnit::Test * child = test->getChildTestAt(childIndex);
CppUnit::TestSuite * testSuite = dynamic_cast<CppUnit::TestSuite*>(child);
if (testSuite
&& testSuite->getChildTestCount() > 0
&& dynamic_cast<CppUnit::TestFixture*>(testSuite->getChildTestAt(0)))
{
suites.push_back(testSuite);
}
else GetTestSuitesWithFixtures(child, suites);
}
}