【发布时间】:2021-11-01 05:19:18
【问题描述】:
我想实现一个简单的测试结构。以下是我创建基类和派生类的方法。
testBase.h:
class TestBase {
public:
TestBase() {}
virtual void TestStart() = 0;
virtual void TestEnd() = 0;
void RunTest() {
// I need code here to trigger a chain of calls
}
};
classifierTest.h:
#include "testBase.h"
class ClassifierTest: public TestBase
{
public:
ClassifierTest() {
}
void TestStart();
void TestEnd();
void Test1();
void Test2();
void Test3();
};
classifierTest.cpp:
#include "classifierTest.h"
void ClassifierTest::TestStart() {
}
void ClassifierTest::TestEnd() {
}
void ClassifierTest::Test1(){
}
void ClassifierTest::Test2(){
}
void ClassifierTest::Test3(){
}
主要功能:
ClassifierTest *classifierTest = new ClassifierTest();
classifierTest->RunTest();
假设Test1()、Test2()和Test3()是我的测试方法,我以后可能会在这里添加更多测试。
我的目标是,当我在main函数中调用RunTest()时,然后在TestStart()之后和TestEnd()之前,这些测试方法被一一调用。
所以他们会像这样运行:
TestStart()Test1()TestEnd()TestStart()Test2()TestEnd()TestStart()Test3()TestEnd()
我不想在基类中专门添加测试方法。但问题是如何从 RunTest() 触发这些调用链。所以它不知道的基本触发方法。
我相信它应该像 .net 中的反射?
【问题讨论】:
-
您对此有疑问吗?不清楚你在问什么。
-
顺便说一句,创建自己的测试框架可能很有趣,但很快你就会发现你正在重新发明一个轮子。有很多很好的现有解决方案
-
我希望测试代码尽可能的简约。如果这不起作用,我可能会开始使用一个。有什么轻便的建议吗?
-
@AryanFirouzian 一个轻便的什么?测试库?
-
有两个著名的库,一个来自 Google(我相信是 gtest)和一个来自 Boost。在任何情况下,测试函数的自动发现都需要反射,而这在 C++ 中是没有的。您也许可以在基类中注册这些函数,前提是它们都具有相同的签名。只需将函数指针存储在容器中。或者,采取另一个步骤并在那里注册
std::function对象。这些和 lambdas 甚至可以完全消除对派生类的要求。
标签: c++ testing inheritance virtual-functions