是否可以在使用googletest的基类中定义(纯虚拟)测试用例?

Is it possible to define (pure virtual) test cases in a base class using googletest

本文关键字:定义 虚拟 测试用例 基类 googletest 是否      更新时间:2023-10-16

是否可以用(抽象的)测试用例定义一个基本测试fixture并从中派生类?

我想支持两种场景(摘自Roy Overshores的《单元测试的艺术》):

  1. 模板测试类模式在基本测试fixture中定义抽象测试用例,从而强制派生类实现它们。
  2. 抽象测试驱动类模式在所有派生类自动继承的基类中实现测试

我不明白这是如何与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)重复的原因。