c++ - 如何在 CppUnitTestFramework 中对具有 TEST_CLASS 的类使用继承

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

我有一个继承自另一个类的类,如下所示:

class TestClass : public BaseClass

我想知道是否可以使用 TEST_CLASS 宏或作为 C++ 的 Microsoft 单元测试框架一部分的其他宏将其作为测试类。我试过:

class TEST_CLASS(TestClass : public BaseClass)

但是 IDE 给出了错误'Error: expected either a definition or a tag name' 并且编译器错误是error C3861: '__GetTestClassInfo': identifier not found

我知道在测试类上继承可能是不好的做法,但它会使测试的实现更容易。我对 C++ 比较陌生,所以我想知道它是否是我错过的简单东西,或者它是否不可能。

谢谢,

最佳答案

还有一个选项您没有包括在内,其他人可能会在不知道解决方案的情况下被这个问题绊倒。

您实际上可以通过查看宏本身从任意类型派生:

///////////////////////////////////////////////////////////////////////////////////////////
// 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
{
};

请记住,如果您正在使用资源,您将需要一个虚拟析构函数来调用它。如果您要使用它们,您还必须直接调用初始化和清理方法,因为它们创建的静态方法不会自动调用。

祝你好运,测试顺利!

关于c++ - 如何在 CppUnitTestFramework 中对具有 TEST_CLASS 的类使用继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424377/

相关文章:

unit-testing - 如何在 Maven 2 中的两个测试套件之间切换?

python - 如何对过滤器进行单元测试?

c++ - 为什么 GCC 不编译这段代码?

c++ - Visual Studio 版本之间不同的未分配内存行为

c++ - g_main_loop 使用 100% CPU

python - 如何断言模拟函数是用生成器调用的?

c++ - #define 预处理器指令可以包含 if 和 else 吗?

c++ - 基类的析构函数在不破坏基类的情况下被调用!

Java继承...我认为。也许不会

java - Java中可以不使用abstract关键字来定义抽象方法吗?