gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:09:28 25 4
gpt4 key购买 nike

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

我想支持两个场景(摘自 Roy Overshores“单元测试的艺术”):

  1. 模板测试类模式在基础测试夹具中定义抽象测试用例,从而强制派生类实现它们。
  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 重复的原因。

关于c++ - 是否可以使用 googletest 在基类中定义(纯虚拟)测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31580472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com