我有一个继承自另一个类的类:
class TestClass : public BaseClass
我想知道是否可以使用TEST_CLASS
宏或其他一些宏来构建测试类,这些宏是Microsoft单元测试框架C ++的一部分。我试过了:
class TEST_CLASS(TestClass : public BaseClass)
但是IDE会给出错误&#39;错误:预期定义或标记名称 <编辑错误错误C3861:&#39; __ GetTestClassInfo&# 39;:未找到标识符
我知道在测试类上继承可能是不好的做法,但这样可以更轻松地实现测试。我对C ++比较陌生,所以我想知道它是否是我错过的简单内容,或者它是否是不可能的。
谢谢,
答案 0 :(得分:8)
您还没有包含另外一个选项,而其他选项可能会在不知道解决方案的情况下绊倒此问题。
通过查看宏本身,您实际上可以从任意类型派生出来:
///////////////////////////////////////////////////////////////////////////////////////////
// Macro to define your test class.
// Note that you can only define your test class at namespace scope,
// otherwise the compiler will raise an error.
#define TEST_CLASS(className) \
ONLY_USED_AT_NAMESPACE_SCOPE class className : public ::Microsoft::VisualStudio::CppUnitTestFramework::TestClass<className>
由于C ++支持多重继承,因此可以使用类似于以下内容的代码轻松派生:
class ParentClass
{
public:
ParentClass();
virtual ~ParentClass();
};
TEST_CLASS(MyTestClass), public ParentClass
{
};
请记住,如果您正在使用资源,则需要使用虚拟析构函数来调用它。您还必须调用initialize&amp;如果您要使用它们,则直接清理方法,因为它们创建的静态方法不会自动调用。
祝你好运,好好测试!
答案 1 :(得分:0)
自从我使用CppUnitTestFramework以来已经有一段时间了,但当时this site已成为关于该主题的许多问题的宝贵资源。
TEST_CLASS
是preprocessor macro。您可以使用它来声明像
TEST_CLASS(className)
{
TEST_METHOD(methodName)
{
// test method body
}
// and so on
}
那就是它。据我所知,没有办法从彼此继承测试类。
可能虽然composition over inheritance可能对您的具体情况有帮助。