是否可以在使用googletest的基类中定义(纯虚拟)测试用例?
Is it possible to define (pure virtual) test cases in a base class using googletest
是否可以用(抽象的)测试用例定义一个基本测试fixture并从中派生类?
我想支持两种场景(摘自Roy Overshores的《单元测试的艺术》):
- 模板测试类模式在基本测试fixture中定义抽象测试用例,从而强制派生类实现它们。
- 抽象测试驱动类模式在所有派生类自动继承的基类中实现测试
我不明白这是如何与googletest工作的。如果我有一个基类
#pragma once
class BaseClass : public ::testing::Test
{
};
TEST_F(BaseClass, T1)
{
}
和两个派生类(在不同的文件中)
#include "stdafx.h"
#include "BaseClass.h"
class DerivedClass1 : public BaseClass
{
};
和
#include "stdafx.h"
#include "BaseClass.h"
class DerivedClass2 : public BaseClass
{
};
我得到编译错误
virtual void __thiscall BaseClass_T1_Test::TestBody(void)" (?TestBody@BaseClass_T1_Test@@EAEXXZ) already defined in DerivedClass1.obj
是否有可能在测试基类中定义具体和纯虚拟测试? 尝试将TEST_F(BaseClass, T1){}从BaseClass.h移到它自己的。cpp文件中。BaseClass.h包含在DerivedClass1和DerivedClass2的2个.cpp文件中,并且在编译期间,TEST_F将被扩展为一组可执行函数,这些函数将包含在这两个.cpp文件中。这就是链接器不高兴并抱怨符号TestBody@BaseClass_T1_Test@@EAEXXZ)重复的原因。
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- 重载虚拟行为是否定义良好?
- 纯虚拟类和错误未定义对 'vtable 的引用
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 基类可以声明虚拟方法但不定义它吗?仍然在派生类中定义
- 无法使用在子类中定义的虚拟getter实现基类
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 没有针对完全专用模板类的外联虚拟方法定义
- 为什么虚拟方法生成对_sbrk的未定义引用?
- 在C++为矢量编写自定义虚拟分配器时遇到问题
- 是否需要定义虚拟析构函数
- 此处未定义虚拟析构函数
- 如何在子类中初始化具有自定义虚拟函数的基成员变量
- 在C++中定义虚拟get和set函数是否被认为是一种好的做法
- 在派生类中重新定义虚拟运算符==
- 在C++中定义虚拟继承的两种不同方式
- 在哪里可以定义虚拟函数
- 为什么不能使用来定义虚拟函数