如何在CppUnitTestFramework中使用TEST_CLASS的类继承

时间:2014-06-26 07:06:55

标签: c++ unit-testing inheritance visual-studio-2013 cppunit

我有一个继承自另一个类的类:

class TestClass : public BaseClass

我想知道是否可以使用TEST_CLASS宏或其他一些宏来构建测试类,这些宏是Microsoft单元测试框架C ++的一部分。我试过了:

class TEST_CLASS(TestClass : public BaseClass)

但是IDE会给出错误&#39;错误:预期定义或标记名称 <编辑错误错误C3861:&#39; __ GetTestClassInfo&# 39;:未找到标识符

我知道在测试类上继承可能是不好的做法,但这样可以更轻松地实现测试。我对C ++比较陌生,所以我想知道它是否是我错过的简单内容,或者它是否是不可能的。

谢谢,

2 个答案:

答案 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_CLASSpreprocessor macro。您可以使用它来声明像

这样的测试类
TEST_CLASS(className)
{
    TEST_METHOD(methodName) 
    {
        // test method body
    }
    // and so on
}

那就是它。据我所知,没有办法从彼此继承测试类。

可能虽然composition over inheritance可能对您的具体情况有帮助。