【发布时间】:2023-01-08 13:45:42
【问题描述】:
我正在尝试创建受 CppUnit 启发的单元测试框架。每个测试套件都是一个单独的类,带有设置方法、拆卸方法,然后是一些单元测试方法。我希望能够遍历单元测试方法,以便我可以在每个方法之前和之后调用设置和拆卸。
这是我开始使用的代码。
// In class TestSuite.hpp
public:
typedef void (TestSuite::*UnitTest)();
static std::vector<UnitTest> m_TestList;
static TestSuite* Instance();
void setup();
void teardown();
protected:
void unitTestOne();
private:
static TestSuite* m_Instance;
// In main.cpp
int main() {
for(TestSuite::UnitTest test : TestSuite::m_TestList) {
TestSuite::Instance()->setup();
TestSuite::Instance()->test();
TestSuite::Instance()->teardown();
}
}
结果出现此错误消息
error C2039: 'test': is not a member of 'TestSuite'
我真的希望,因为类型定义“UnitTest”意味着“TestSuite”的一个方法,它什么都不接受也不返回什么,它会被识别为对 TestSuite::Instance() 的有效调用。任何对我哪里出错的见解都将不胜感激。
【问题讨论】:
-
“我真的希望……”您希望错了,因为该类中没有
test。 -
您可能希望使用
test而不是TestSuite::Instance()。 -
TestSuite::Instance()的类型是TestSuite*并且在取消引用后你得到一个TestSuite对象,它没有test成员,正如错误明确指出的那样。
标签: c++ function-pointers pointer-to-member cppunit